Server definition
- Hash
- sha256:12c5731e2813397c5511a6cc7b332f07f52bdcd82ec15c2cc9f89764e22e6236
- What it is
- What a remote MCP server returned when asked what it offers: 15 tools
The blob, as servednamed by its sha256
{
"instructions": "PuckAPI -- 15 NHL data tools. Stats, odds, and everything between.\n\n## First Steps\n\n1. Call list_teams (1 cr) to see all 32 NHL teams and their abbreviations.\n2. For upcoming games, use get_schedule (2 cr). For past games, use get_games (5 cr).\n\n## Tool Selection\n\n### Looking up a team?\n- Need all teams or check an abbreviation? -> list_teams (1 cr)\n- Current standings with records? -> get_standings (2 cr)\n- Detailed stats for one team? -> get_team_stats (5 cr)\n- Compare two teams head-to-head? -> get_head_to_head (10 cr)\n\n### Looking up games?\n- Upcoming schedule? -> get_schedule (2 cr)\n- Past games with filters? -> get_games (5 cr)\n- Full detail for one game with odds and starting goalies? -> get_game_detail (10 cr)\n\n### Looking up players?\n- Find a player by name? -> search_players (2 cr)\n- Bio and team context for one player? -> get_player_stats (5 cr)\n- Goalie leaderboard (save%, GAA, GSAX, wins)? -> get_goalie_stats (5 cr)\n- Skater leaderboard (points, goals, assists, +/-, shots)? -> get_skater_season_stats (5 cr)\n\n### Play-by-play?\n- Events for a game, player or season? -> get_plays (10 cr)\n- Shot locations to plot or model? -> get_shot_map (10 cr)\n\n### Betting odds?\n- Odds for a specific game? -> get_odds (10 cr)\n- How lines moved over time? -> get_line_movement (25 cr, most expensive)\n\n## Common Workflows\n\nTeam overview: list_teams -> get_team_stats -> get_standings (8 cr)\nGame preview: get_schedule -> get_game_detail -> get_odds (22 cr)\nPlayer lookup: search_players -> get_player_stats (7 cr)\nMatchup analysis: get_head_to_head -> get_odds (20 cr)\nGoalie comparison: get_goalie_stats (5 cr)\nShot analysis: search_players -> get_shot_map (12 cr)\nGame breakdown: get_game_detail -> get_plays (20 cr)\n\n## Credit Costs\n\n| Credits | Tools |\n|---------|-------|\n| 1 | list_teams |\n| 2 | get_standings, get_schedule, search_players |\n| 5 | get_games, get_team_stats, get_player_stats, get_goalie_stats |\n| 10 | get_odds, get_game_detail, get_head_to_head, get_plays, get_shot_map |\n| 25 | get_line_movement |\n\n## Data Coverage\n\n- Teams: All 32 active NHL teams (plus historical ATL, ARI)\n- Games: 2010-11 season through current\n- Odds: 2019-20 season through current (DraftKings, FanDuel, BetMGM, ESPN BET).\n 2019-20 is sparse; 2020-21 onwards covers about 93% of games\n- Players: 4,800+ across 16 seasons\n- Goalie stats: season lines with daily snapshots in season\n- Skater stats: 2024-25 and 2025-26 only\n- Play-by-play: 2010-11 onwards, every event with rink coordinates and strength state\n\n## Derived metrics, and what they mean\n\nThese are computed from play-by-play with a shot-quality model, not taken from\na feed:\n\n- Corsi% / Fenwick% (get_standings, get_team_stats): share of 5v5 shot\n attempts. Fenwick excludes blocked shots\n- xGF / xGA: expected goals for and against, **5v5 only**\n\n**Do not compare a team's xGA with its goalies' xGA.** Team numbers are 5v5;\ngoalie numbers cover every strength, so the goalie figure is roughly a quarter\nlarger. Both are calibrated within their own season, so each is right on its\nown terms -- they are answering different questions.\n- GSAX (get_goalie_stats): expected goals against minus goals allowed.\n Positive means the goalie saved more than an average goalie would have\n- High-danger save%: saves on shots inside the slot, about a quarter of all\n shots\n- rolling_save_pct, rolling_gsax, trend: the goalie's last 10 appearances\n- Goalie starts (get_game_detail): derived from who was in net, so available\n for games that have been played, not for tonight's lineup\n\nThe model slightly over-rates the very best chances, so a goalie facing an\nunusually high-danger workload is flattered a little. Say so if the margin\nbetween two goalies is small.\n\n## Important Notes\n\n- All tools are read-only. No data is modified.\n- Team abbreviations are standard NHL (e.g. BUF, TOR, NYR, EDM). Use list_teams if unsure.\n- Season IDs use the format 20252026 (start year + end year concatenated).\n- Game IDs are NHL API format (e.g. 2025020887).\n- Odds data is only available for 2019-20 onwards. Earlier games return empty odds arrays.\n- get_line_movement is the most expensive tool (25 cr). Prefer get_odds (10 cr) when you just need current lines.",
"tools": [
{
"description": "Use when you need everything about one game: both teams' full info, all betting odds, and the goalies who started, with their time on ice. Requires a game ID (get one from get_games or get_schedule). Odds available for 2019-20 onwards, though 2019-20 itself is sparse. Goalie starts are derived from play-by-play, so they are available for played games, not upcoming ones. Costs 10 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"game_id": {
"description": "NHL game ID (e.g. 2025020887)",
"type": "string"
}
},
"required": [
"game_id"
],
"type": "object"
},
"name": "get_game_detail",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"away_team": {},
"game": {},
"goalie_starts": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"home_team": {},
"odds": {
"items": {
"additionalProperties": false,
"properties": {
"bookmaker": {
"type": "string"
},
"capturedAt": {
"type": [
"string",
"null"
]
},
"mlAway": {
"type": [
"number",
"null"
]
},
"mlAwayProb": {
"type": [
"number",
"null"
]
},
"mlHome": {
"type": [
"number",
"null"
]
},
"mlHomeProb": {
"type": [
"number",
"null"
]
},
"snapshotType": {
"type": [
"string",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"spreadAway": {
"type": [
"number",
"null"
]
},
"spreadAwayOdds": {
"type": [
"number",
"null"
]
},
"spreadHome": {
"type": [
"number",
"null"
]
},
"spreadHomeOdds": {
"type": [
"number",
"null"
]
},
"total": {
"type": [
"number",
"null"
]
},
"totalOverOdds": {
"type": [
"number",
"null"
]
},
"totalUnderOdds": {
"type": [
"number",
"null"
]
}
},
"required": [
"bookmaker",
"snapshotType",
"source",
"mlHome",
"mlAway",
"mlHomeProb",
"mlAwayProb",
"spreadHome",
"spreadHomeOdds",
"spreadAway",
"spreadAwayOdds",
"total",
"totalOverOdds",
"totalUnderOdds",
"capturedAt"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"game",
"home_team",
"away_team",
"odds",
"goalie_starts"
],
"type": "object"
}
},
{
"description": "Use when querying past or future games with filters. Returns scores, teams, venue, and game metadata. For upcoming-only games, prefer get_schedule (2 cr) instead. Costs 5 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"date_from": {
"description": "Start date (YYYY-MM-DD)",
"type": "string"
},
"date_to": {
"description": "End date (YYYY-MM-DD)",
"type": "string"
},
"game_state": {
"description": "Filter by game state. FINAL and OFF both mean finished and return the same games; FUT is scheduled, LIVE in progress.",
"enum": [
"FUT",
"LIVE",
"FINAL",
"OFF"
],
"type": "string"
},
"game_type": {
"description": "Filter by game type",
"enum": [
"regular",
"playoff",
"preseason"
],
"type": "string"
},
"limit": {
"description": "Max results (default 100)",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted.",
"type": "string"
},
"team": {
"description": "Team abbreviation to filter (home or away)",
"type": "string"
}
},
"type": "object"
},
"name": "get_games",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"games": {
"items": {
"additionalProperties": false,
"properties": {
"awayScore": {
"type": [
"number",
"null"
]
},
"awayTeam": {
"type": "string"
},
"gameDate": {
"type": [
"string",
"null"
]
},
"gameState": {
"type": [
"string",
"null"
]
},
"gameType": {
"type": [
"string",
"null"
]
},
"homeScore": {
"type": [
"number",
"null"
]
},
"homeTeam": {
"type": "string"
},
"id": {
"type": "string"
},
"season": {
"type": [
"string",
"null"
]
},
"startTime": {
"type": [
"string",
"null"
]
},
"venue": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"season",
"gameDate",
"startTime",
"homeTeam",
"awayTeam",
"homeScore",
"awayScore",
"gameState",
"gameType",
"venue"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"games",
"count"
],
"type": "object"
}
},
{
"description": "Use when ranking goalies or comparing goalie performance. Returns a leaderboard sorted by save%, GAA, GSAX, or wins, with a games-played filter. Includes goals saved above expected, high-danger save%, rolling save% and GSAX over the last 10 appearances, form trend and rest days. Goalie expected goals cover every strength, unlike the 5v5-only team possession columns. Costs 5 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "Max results (default 20)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"min_games": {
"description": "Minimum games played (default 10)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season.",
"type": "string"
},
"sort_by": {
"description": "Sort metric (default save_pct). gsax is goals saved above expected.",
"enum": [
"save_pct",
"gaa",
"gsax",
"wins"
],
"type": "string"
},
"team": {
"description": "Filter by team abbreviation",
"type": "string"
}
},
"type": "object"
},
"name": "get_goalie_stats",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"filters": {
"additionalProperties": false,
"properties": {
"min_games": {
"type": "number"
},
"season": {
"type": [
"string",
"null"
]
},
"sort_by": {
"type": "string"
}
},
"required": [
"season",
"min_games",
"sort_by"
],
"type": "object"
},
"goalies": {
"items": {
"additionalProperties": false,
"properties": {
"gaa": {
"type": [
"number",
"null"
]
},
"gamesPlayed": {
"type": [
"number",
"null"
]
},
"gsax": {
"type": [
"number",
"null"
]
},
"highDangerSavePct": {
"type": [
"number",
"null"
]
},
"losses": {
"type": [
"number",
"null"
]
},
"otLosses": {
"type": [
"number",
"null"
]
},
"playerId": {
"type": "number"
},
"playerName": {
"type": "string"
},
"restDays": {
"type": [
"number",
"null"
]
},
"rollingSavePct": {
"type": [
"number",
"null"
]
},
"savePct": {
"type": [
"number",
"null"
]
},
"shutouts": {
"type": [
"number",
"null"
]
},
"snapshotDate": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"string",
"null"
]
},
"teamName": {
"type": [
"string",
"null"
]
},
"trend": {
"type": [
"string",
"null"
]
},
"wins": {
"type": [
"number",
"null"
]
}
},
"required": [
"playerId",
"playerName",
"team",
"teamName",
"gamesPlayed",
"wins",
"losses",
"otLosses",
"savePct",
"gaa",
"gsax",
"shutouts",
"highDangerSavePct",
"rollingSavePct",
"trend",
"restDays",
"snapshotDate"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"goalies",
"count",
"filters"
],
"type": "object"
}
},
{
"description": "Use when comparing two teams' history. Returns recent matchups with win/loss record. Can filter by season or get all-time. Costs 10 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "Max games to return (default 20)",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Omit for all-time.",
"type": "string"
},
"team1": {
"description": "First team abbreviation (e.g. BUF)",
"type": "string"
},
"team2": {
"description": "Second team abbreviation (e.g. TOR)",
"type": "string"
}
},
"required": [
"team1",
"team2"
],
"type": "object"
},
"name": "get_head_to_head",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"games": {
"items": {
"additionalProperties": false,
"properties": {
"awayScore": {
"type": [
"number",
"null"
]
},
"awayTeam": {
"type": "string"
},
"gameDate": {
"type": [
"string",
"null"
]
},
"gameState": {
"type": [
"string",
"null"
]
},
"gameType": {
"type": [
"string",
"null"
]
},
"homeScore": {
"type": [
"number",
"null"
]
},
"homeTeam": {
"type": "string"
},
"id": {
"type": "string"
},
"season": {
"type": [
"string",
"null"
]
},
"startTime": {
"type": [
"string",
"null"
]
},
"venue": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"season",
"gameDate",
"startTime",
"homeTeam",
"awayTeam",
"homeScore",
"awayScore",
"gameState",
"gameType",
"venue"
],
"type": "object"
},
"type": "array"
},
"record": {
"additionalProperties": {
"type": "number"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"team1": {
"type": "string"
},
"team2": {
"type": "string"
},
"total_games": {
"type": "number"
}
},
"required": [
"team1",
"team2",
"record",
"total_games",
"games"
],
"type": "object"
}
},
{
"description": "Use when analyzing how betting lines moved over time. Returns time-series snapshots grouped by bookmaker. Most expensive tool (25 cr). If you only need current lines, use get_odds (10 cr) instead.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"bookmaker": {
"description": "Filter by specific bookmaker key (lowercase)",
"type": "string"
},
"game_id": {
"description": "NHL game ID",
"type": "string"
}
},
"required": [
"game_id"
],
"type": "object"
},
"name": "get_line_movement",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"away_team": {
"type": "string"
},
"game_id": {
"type": "string"
},
"home_team": {
"type": "string"
},
"movement": {
"additionalProperties": {
"items": {
"additionalProperties": false,
"properties": {
"bookmaker": {
"type": "string"
},
"capturedAt": {
"type": [
"string",
"null"
]
},
"mlAway": {
"type": [
"number",
"null"
]
},
"mlHome": {
"type": [
"number",
"null"
]
},
"snapshotType": {
"type": [
"string",
"null"
]
},
"spreadHome": {
"type": [
"number",
"null"
]
},
"total": {
"type": [
"number",
"null"
]
}
},
"required": [
"bookmaker",
"snapshotType",
"mlHome",
"mlAway",
"spreadHome",
"total",
"capturedAt"
],
"type": "object"
},
"type": "array"
},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"game_id",
"home_team",
"away_team",
"movement"
],
"type": "object"
}
},
{
"description": "Use when checking betting lines. Pass game_id for one game (10 credits): moneyline, puck line and total by bookmaker, opening and closing. Or pass season (optionally with team) for a whole season of closing lines in one call, with final scores, at 10 credits per game returned (a full season is ~13,700 credits, a team-season ~820), 100 games a page by default (up to 500). Each book's line is an array in the order given by columns. Set estimate_only to get the price without being charged. Odds from 2020-21 on, with sparse 2019-20 coverage; 60+ books from 2025-26 with all_books.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"all_books": {
"description": "With season: every book held (60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET.",
"type": "boolean"
},
"bookmaker": {
"description": "Filter by bookmaker key (e.g. draftkings, fanduel, betmgm). Lowercase.",
"type": "string"
},
"estimate_only": {
"description": "Return what this call would cost, without charging or running it.",
"type": "boolean"
},
"game_id": {
"description": "NHL game ID (e.g. 2025020887). Omit and pass season for a whole season.",
"type": "string"
},
"limit": {
"description": "With season: games per page (default 100, max 500).",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "With season: page offset; use next_offset from the previous page.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"season": {
"description": "Season for a whole season of lines, e.g. 2025-26 or 20252026. Used when game_id is not set.",
"type": "string"
},
"snapshot_type": {
"description": "opening (game-day morning; for a game not yet played, the latest morning line) or closing (final pre-game). Single game: default both. Season: default closing.",
"enum": [
"opening",
"closing"
],
"type": "string"
},
"team": {
"description": "With season: only this team's games (abbreviation, e.g. BUF).",
"type": "string"
}
},
"type": "object"
},
"name": "get_odds",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"away_team": {
"type": "string"
},
"bookmaker_count": {
"type": "number"
},
"columns": {
"items": {
"type": "string"
},
"type": "array"
},
"count": {
"type": "number"
},
"credits": {
"type": "number"
},
"credits_per_game": {
"type": "number"
},
"estimate_only": {
"type": "boolean"
},
"game_date": {
"type": [
"string",
"null"
]
},
"game_id": {
"type": "string"
},
"games": {
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"home_team": {
"type": "string"
},
"next_offset": {
"type": [
"number",
"null"
]
},
"odds": {
"items": {
"additionalProperties": false,
"properties": {
"bookmaker": {
"type": "string"
},
"capturedAt": {
"type": [
"string",
"null"
]
},
"mlAway": {
"type": [
"number",
"null"
]
},
"mlAwayProb": {
"type": [
"number",
"null"
]
},
"mlHome": {
"type": [
"number",
"null"
]
},
"mlHomeProb": {
"type": [
"number",
"null"
]
},
"snapshotType": {
"type": [
"string",
"null"
]
},
"source": {
"type": [
"string",
"null"
]
},
"spreadAway": {
"type": [
"number",
"null"
]
},
"spreadAwayOdds": {
"type": [
"number",
"null"
]
},
"spreadHome": {
"type": [
"number",
"null"
]
},
"spreadHomeOdds": {
"type": [
"number",
"null"
]
},
"total": {
"type": [
"number",
"null"
]
},
"totalOverOdds": {
"type": [
"number",
"null"
]
},
"totalUnderOdds": {
"type": [
"number",
"null"
]
}
},
"required": [
"bookmaker",
"snapshotType",
"source",
"mlHome",
"mlAway",
"mlHomeProb",
"mlAwayProb",
"spreadHome",
"spreadHomeOdds",
"spreadAway",
"spreadAwayOdds",
"total",
"totalOverOdds",
"totalUnderOdds",
"capturedAt"
],
"type": "object"
},
"type": "array"
},
"season": {
"type": "string"
},
"snapshot_type": {
"type": "string"
},
"tool": {
"type": "string"
},
"total_games": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Use when you need full details for one player: bio, team, physical attributes, and headshot. For skaters, also returns the latest season line (games, goals, assists, points, +/-, PP/SH, shooting%, TOI). For goalies, save%, GAA, GSAX, and trend data. Requires player ID from search_players. Costs 5 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"player_id": {
"description": "NHL player ID",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"player_id"
],
"type": "object"
},
"name": "get_player_stats",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"goalie_stats": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"player": {},
"skater_stats": {
"anyOf": [
{},
{
"type": "null"
}
]
}
},
"required": [
"player",
"goalie_stats",
"skater_stats"
],
"type": "object"
}
},
{
"description": "Use for play-by-play events: goals, shots, misses, blocks, faceoffs, hits, giveaways, takeaways, penalties, with rink coordinates, strength state (5v5, 5v4), zone, and the players involved. Filter by game, season, team, player (any role), event type, strength, zone, or period. Requires at least one of game_id, season or player_id. Paginate with offset. Costs 10 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"game_id": {
"description": "NHL game ID (e.g. 2025020887)",
"type": "string"
},
"limit": {
"description": "Max events (default 200)",
"maximum": 1000,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Pagination offset",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"period": {
"description": "Period number (4+ is overtime)",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"player_id": {
"description": "NHL player ID; matches the player in any role on the event",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025).",
"type": "string"
},
"shot_attempts_only": {
"description": "Only goals, shots on goal, missed shots and blocked shots (Corsi events)",
"type": "boolean"
},
"strength": {
"description": "Skater strength from the event owner's view, e.g. 5v5, 5v4, 4v5",
"type": "string"
},
"team": {
"description": "Team abbreviation that owns the event (e.g. BUF)",
"type": "string"
},
"type": {
"description": "Event type",
"enum": [
"goal",
"shot-on-goal",
"missed-shot",
"blocked-shot",
"faceoff",
"hit",
"giveaway",
"takeaway",
"penalty",
"delayed-penalty",
"stoppage",
"period-start",
"period-end",
"game-end",
"shootout-complete",
"failed-shot-attempt"
],
"type": "string"
},
"zone": {
"description": "Zone: O offensive, N neutral, D defensive",
"enum": [
"O",
"N",
"D"
],
"type": "string"
}
},
"type": "object"
},
"name": "get_plays",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"next_offset": {
"type": [
"number",
"null"
]
},
"plays": {
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"summary": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"plays",
"summary",
"count",
"next_offset"
],
"type": "object"
}
},
{
"description": "Use when checking what games are coming up. Returns only unplayed future games for the next N days (default 7). For past games, use get_games instead. Costs 2 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"description": "Number of days ahead to look (default 7)",
"maximum": 30,
"minimum": 1,
"type": "integer"
},
"team": {
"description": "Team abbreviation to filter",
"type": "string"
}
},
"type": "object"
},
"name": "get_schedule",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"upcoming_games": {
"items": {
"additionalProperties": false,
"properties": {
"awayTeam": {
"type": "string"
},
"awayTeamName": {
"type": [
"string",
"null"
]
},
"gameDate": {
"type": [
"string",
"null"
]
},
"gameType": {
"type": [
"string",
"null"
]
},
"homeTeam": {
"type": "string"
},
"homeTeamName": {
"type": [
"string",
"null"
]
},
"id": {
"type": "string"
},
"startTime": {
"type": [
"string",
"null"
]
},
"venue": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"gameDate",
"startTime",
"homeTeam",
"awayTeam",
"homeTeamName",
"awayTeamName",
"venue",
"gameType"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"upcoming_games",
"count"
],
"type": "object"
}
},
{
"description": "Use when you want shot locations rather than a list of events: every shot attempt with rink coordinates, shot type, strength, shooter and goalie. Filter by game, or by season plus a team or player. Paginated: follow next_offset, since a season runs past one page and pages are chronological. Costs 10 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"game_id": {
"description": "NHL game ID",
"type": "string"
},
"limit": {
"description": "Max shots per page (default 1000)",
"maximum": 2000,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Pagination offset; follow next_offset for a full season",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"player_id": {
"description": "NHL player ID of the shooter",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025); use with team",
"type": "string"
},
"strength": {
"description": "Strength filter, e.g. 5v5",
"type": "string"
},
"team": {
"description": "Team abbreviation; use with season",
"type": "string"
}
},
"type": "object"
},
"name": "get_shot_map",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"next_offset": {
"type": [
"number",
"null"
]
},
"shots": {
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"summary": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"shots",
"summary",
"count",
"next_offset"
],
"type": "object"
}
},
{
"description": "Use when ranking skaters or comparing scoring. Returns a leaderboard sorted by points, goals, assists, plus/minus, or shots, with a games-played filter. Includes power play and shorthanded production, shooting%, faceoff%, and average time on ice. Covers 2024-25 and 2025-26 only; earlier seasons return no rows. Costs 5 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"description": "Max results (default 20)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"min_games": {
"description": "Minimum games played (default 10)",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats, which is the current season once it is under way and the previous one before that. The season actually used is echoed in filters.season.",
"type": "string"
},
"sort_by": {
"description": "Sort metric (default points)",
"enum": [
"points",
"goals",
"assists",
"plus_minus",
"shots"
],
"type": "string"
},
"team": {
"description": "Filter by team abbreviation",
"type": "string"
}
},
"type": "object"
},
"name": "get_skater_season_stats",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"filters": {
"additionalProperties": false,
"properties": {
"min_games": {
"type": "number"
},
"season": {
"type": [
"string",
"null"
]
},
"sort_by": {
"type": "string"
}
},
"required": [
"season",
"min_games",
"sort_by"
],
"type": "object"
},
"skaters": {
"items": {
"additionalProperties": false,
"properties": {
"assists": {
"type": [
"number",
"null"
]
},
"avgToiPerGame": {
"type": [
"number",
"null"
]
},
"faceoffPct": {
"type": [
"number",
"null"
]
},
"gameWinningGoals": {
"type": [
"number",
"null"
]
},
"gamesPlayed": {
"type": [
"number",
"null"
]
},
"goals": {
"type": [
"number",
"null"
]
},
"otGoals": {
"type": [
"number",
"null"
]
},
"pim": {
"type": [
"number",
"null"
]
},
"playerId": {
"type": "number"
},
"playerName": {
"type": "string"
},
"plusMinus": {
"type": [
"number",
"null"
]
},
"points": {
"type": [
"number",
"null"
]
},
"position": {
"type": [
"string",
"null"
]
},
"powerPlayGoals": {
"type": [
"number",
"null"
]
},
"powerPlayPoints": {
"type": [
"number",
"null"
]
},
"shootingPct": {
"type": [
"number",
"null"
]
},
"shorthandedGoals": {
"type": [
"number",
"null"
]
},
"shorthandedPoints": {
"type": [
"number",
"null"
]
},
"shots": {
"type": [
"number",
"null"
]
},
"snapshotDate": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"string",
"null"
]
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"required": [
"playerId",
"playerName",
"team",
"teamName",
"position",
"gamesPlayed",
"goals",
"assists",
"points",
"plusMinus",
"pim",
"powerPlayGoals",
"powerPlayPoints",
"shorthandedGoals",
"shorthandedPoints",
"gameWinningGoals",
"otGoals",
"shots",
"shootingPct",
"faceoffPct",
"avgToiPerGame",
"snapshotDate"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"skaters",
"count",
"filters"
],
"type": "object"
}
},
{
"description": "Use when checking where teams rank in their division or conference. Returns points, wins, losses, OT losses, point%, goal differential, goals for/against per game, and 5v5 possession: Corsi%, Fenwick% and expected goals for and against. The possession columns are 5v5 only, so they will not match a goalie's expected goals against, which covers every strength. Defaults to the most recent season with standings. Costs 2 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"conference": {
"description": "Filter by conference",
"enum": [
"Eastern",
"Western"
],
"type": "string"
},
"division": {
"description": "Filter by division (e.g. Atlantic, Metropolitan, Central, Pacific)",
"type": "string"
},
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season.",
"type": "string"
}
},
"type": "object"
},
"name": "get_standings",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"snapshot_date": {
"type": [
"string",
"null"
]
},
"standings": {
"items": {
"additionalProperties": false,
"properties": {
"conference": {
"type": "string"
},
"corsiPct": {
"type": [
"number",
"null"
]
},
"division": {
"type": "string"
},
"expectedGoalsAgainst": {
"type": [
"number",
"null"
]
},
"expectedGoalsFor": {
"type": [
"number",
"null"
]
},
"fenwickPct": {
"type": [
"number",
"null"
]
},
"gamesPlayed": {
"type": [
"number",
"null"
]
},
"goalDiff": {
"type": [
"number",
"null"
]
},
"goalsAgainstPerGame": {
"type": [
"number",
"null"
]
},
"goalsForPerGame": {
"type": [
"number",
"null"
]
},
"losses": {
"type": [
"number",
"null"
]
},
"otLosses": {
"type": [
"number",
"null"
]
},
"pointPct": {
"type": [
"number",
"null"
]
},
"points": {
"type": [
"number",
"null"
]
},
"rank": {
"type": [
"number",
"null"
]
},
"snapshotDate": {
"type": [
"string",
"null"
]
},
"teamAbbrev": {
"type": "string"
},
"teamName": {
"type": "string"
},
"wins": {
"type": [
"number",
"null"
]
}
},
"required": [
"teamAbbrev",
"teamName",
"conference",
"division",
"rank",
"points",
"gamesPlayed",
"wins",
"losses",
"otLosses",
"pointPct",
"goalDiff",
"goalsForPerGame",
"goalsAgainstPerGame",
"corsiPct",
"fenwickPct",
"expectedGoalsFor",
"expectedGoalsAgainst",
"snapshotDate"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"standings",
"snapshot_date",
"count"
],
"type": "object"
}
},
{
"description": "Use when you need full details for one team: record, goals for and against, league rank, and 5v5 possession (Corsi%, Fenwick%, expected goals for and against). Possession is 5v5 only. Requires a team abbreviation (use list_teams if unsure). Costs 5 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"season": {
"description": "Season ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season.",
"type": "string"
},
"team": {
"description": "Team abbreviation (e.g. BUF, TOR, NYR)",
"type": "string"
}
},
"required": [
"team"
],
"type": "object"
},
"name": "get_team_stats",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"current_stats": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"season": {
"type": [
"string",
"null"
]
},
"team": {}
},
"required": [
"team",
"current_stats",
"season"
],
"type": "object"
}
},
{
"description": "Use when you need team abbreviations, or to see all 32 active NHL teams with city, conference, division, and arena. Excludes historical franchises (ATL, ARI). Cheapest tool at 1 credit.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"conference": {
"description": "Filter by conference",
"enum": [
"Eastern",
"Western"
],
"type": "string"
},
"division": {
"description": "Filter by division",
"type": "string"
}
},
"type": "object"
},
"name": "list_teams",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"teams": {
"items": {
"additionalProperties": false,
"properties": {
"abbrev": {
"type": "string"
},
"arena": {
"type": "string"
},
"city": {
"type": "string"
},
"conference": {
"type": "string"
},
"division": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"abbrev",
"name",
"conference",
"division"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"teams",
"count"
],
"type": "object"
}
},
{
"description": "Use when looking up a player by name. Searches 4,800+ players across 16 seasons. Returns active players by default; set active=false for retired/historical. Use the returned player ID with get_player_stats for full details. Costs 2 credits.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"active": {
"description": "Filter by active status (default: true). Set false to search active plus retired/historical players.",
"type": "boolean"
},
"limit": {
"description": "Max results (default 10)",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"position": {
"description": "Filter by position",
"enum": [
"G",
"D",
"C",
"LW",
"RW"
],
"type": "string"
},
"query": {
"description": "Player name to search for (partial match supported)",
"minLength": 1,
"type": "string"
},
"team": {
"description": "Filter by team abbreviation",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_players",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"count": {
"type": "number"
},
"included_inactive": {
"type": "boolean"
},
"note": {
"type": "string"
},
"players": {
"items": {
"additionalProperties": false,
"properties": {
"active": {
"type": [
"boolean",
"null"
]
},
"birthCountry": {
"type": [
"string",
"null"
]
},
"firstName": {
"type": [
"string",
"null"
]
},
"id": {
"type": "number"
},
"jerseyNumber": {
"type": [
"number",
"null"
]
},
"lastName": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"position": {
"type": [
"string",
"null"
]
},
"positionType": {
"type": [
"string",
"null"
]
},
"team": {
"type": [
"string",
"null"
]
},
"teamName": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"name",
"firstName",
"lastName",
"team",
"teamName",
"position",
"positionType",
"jerseyNumber",
"birthCountry",
"active"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"players",
"count",
"included_inactive"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:12c5731e2813397c5511a6cc7b332f07f52bdcd82ec15c2cc9f89764e22e6236 | sha256sum