mcpbeat Sign in

PuckAPI MCP Server

answering

PuckAPI is answering right now. Last checked 2 min ago. It exposes 27 tools. Last commit 17 Oct 2026.

NHL and PWHL stats, play-by-play, expected goals and odds. REST API and MCP server. Free to start.

Uptime history 91 days of history · worst day 97%
91 days agonow
100.0%
Uptime 24h
92 of 92 checks
27
Tools
read from the server
264 ms
Response time
average over 24h
0
Stars
last commit 17 Oct 2026

What changed 91

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 27 September 2026. No other catalogue keeps this.

7 Nov 3 tools appeared get_game_probabilities, get_prop_backtest, get_prop_probabilities
5 Nov a tool changed the parameters it asks for get_shot_map
4 Nov a tool appeared get_prop_movement
1 Nov 2 tools changed the parameters they ask for get_player_props, get_prop_history
1 Nov 2 tool descriptions were rewritten get_player_props, get_prop_history
1 Nov a tool appeared get_market_odds
31 Oct a tool description was rewritten get_prop_history
31 Oct a tool changed the parameters it asks for get_prop_history
30 Oct a tool description was rewritten get_player_props
27 Oct a tool description was rewritten get_player_props
and 77 more, back to 27 September 2026

Nothing serious here today

Today is the operative word: we check PuckAPI every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 2 min ago.

run in your terminal
claude mcp add puckapi --transport http https://mcp.puckapi.com/mcp
Settings → Connectors → Add custom connector, then paste this address
https://mcp.puckapi.com/mcp
~/.codex/config.toml
[mcp_servers.puckapi]
url = "https://mcp.puckapi.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "puckapi": {
      "url": "https://mcp.puckapi.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "puckapi": {
      "type": "http",
      "url": "https://mcp.puckapi.com/mcp"
    }
  }
}

Available tools 27

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

prop
get_prop_backtest
Use to test an idea about player props without pulling every row: how often a kind of prop went over or under against what the market implied, across every finished game we hold prices for that fits your filters. Returns the hit rate, its 95% interval, the average implied and fair probabilities, and each season on its own. For example, shots on goal overs for players whose team was the underdog at home. One result per player per game at the median closing line. It describes the past and recommends nothing. For one player game by game use get_prop_history. Costs 25 credits.
get_prop_history
Use to see how a player did against his prop line over time: for one market (points, goals, assists, shots on goal, blocked shots, goalie saves, power-play points, or anytime or first goal scorer), one row per game with the closing line (the median across books, or one book's), the opening line (the same as the close wherever only one capture was taken), the prices, what the player actually recorded from our box scores and the result against the line, plus the over rate, up to 200 games a call. Costs 10 credits for every 25 games already played that a call covers, and at least 10 a call (accounts opened before November 1 2026 pay 10 a call). Set estimate_only to get the price without being charged. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
get_prop_movement
Use to see how one player's prop line moved before a game: every capture we hold, book by book and oldest first, with the line, both prices and the minutes before the start. line_change is the last capture's line minus the first's. The number of captures varies by game and book. Costs 10 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
get_prop_probabilities
Use for what the market thinks of the player props in one game, not any one book's price: for each player and each line, the average implied probability (margin in) and the fair probability (margin out), with how many books each rests on. Only identical lines are combined, and a yes/no market whose books post only the yes price has no fair probability. Latest pre-game prices. For each book's prices use get_player_props. Costs 10 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
get_prop_projections
Paid plans only (not available on the free plan). Use for the model's projected stat lines for tonight's NHL players: for each game, each skater's projected goals, assists, points and shots with a low-to-high range, and each goalie's projected saves. Skaters also carry over probabilities at the usual half-point lines (goals 0.5 and 1.5, assists 0.5 and 1.5, points 0.5 to 2.5, shots 1.5 to 5.5): goals use the model's own goal distribution, the others are Poisson on the projected rate. Optional team (either side of the game) and player (name fragment) filters. Tonight's slate only; no date argument. Numbers only: no odds, prices or injury notes. An empty slate costs nothing; so does a failed call. Costs 25 credits.
player
get_player_game_log
Use when you need a player's game-by-game stat lines for a season, not a season total. For skaters: date, opponent, home/away, goals, assists, points, shots, PIM and power-play points for each game. For goalies: date, opponent, home/away, decision, shots against, saves, goals against and save% for each game. Built from play-by-play, so time on ice and plus/minus are not available and come back null; goalie time on ice is available only for games the goalie started. Requires player ID from search_players. Costs 5 credits.
get_player_props
Use for player prop lines by sportsbook: over/under on points, goals, assists, shots on goal, blocked shots, goalie saves, power-play points, anytime and first goal scorer, from May 2023 (DraftKings, FanDuel, BetMGM, ESPN BET, Pinnacle and others). Pass game_id for every player's props in one game, or player_id with from_date (and to_date) for one player across games (up to 100). A game costs 10 credits before it starts and 20 once it has (accounts opened before October 30 2026 pay 10 for every game). Returns the closing line by default (the last before the game starts) or the opening line, with each book's over and under prices. Each row has captured_at, scheduled_start and minutes_before_scheduled_start (negative when captured after the scheduled start); a row is kept when it was captured before the sportsbooks' listed start, which in the NBA is usually about 10 minutes after the scheduled one, so filter on minutes_before_scheduled_start > 0 for a strictly before-schedule backtest. Outside football the archive mostly holds one pre-game capture per line, so the opening and closing lines are usually the same; the opening line differs only where a second capture was taken (live capture from October 2026, and wherever else it is held). Set estimate_only to get the price without being charged. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
get_player_stats
Use when you need full details for one player: bio, team, and physical attributes. 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.
game
get_game_detail
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 for every game from 2019-20 on (and part of the 2019 playoffs). Goalie starts are derived from play-by-play, so they are available for played games, not upcoming ones. Costs 10 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
get_game_probabilities
Use for what the market thinks of one game, not any one book's price: the average implied probability (margin in) and the fair probability (margin out) for the moneyline, each puck line and each total, with how many books each rests on. Only identical lines are combined. Each book's last pre-game prices by default (snapshot_type reads latest until the start, closing after it); opening on request. For each book's prices use get_odds. Costs 5 credits. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
games
get_games
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.
goalie
get_goalie_stats
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.
head
get_head_to_head
Use when comparing two teams' history. Returns recent matchups with win/loss record. Can filter by season or get all-time. Costs 10 credits.
line
get_line_movement
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. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
market
get_market_odds
Use for the extra betting markets of a game as history: the regulation result (three-way, a draw is possible), the 1st period result and puck line, and the 1st, 2nd and 3rd period totals. Pass game_id (from get_schedule or get_games) and market. For each sportsbook it returns the opening line (the first one we captured) and the closing line (the last one before the game started), each as the list of outcomes with their point and American price, plus captured_at and minutes_before_start (negative when the last capture came after our scheduled start, which the sportsbooks' listed start can run past). Most books were captured once, so opening and closing are often the same line. Held from May 2023 (the 2022-23 playoffs) for the larger sportsbooks only; not every game has every market. Costs 10 credits a call; a game with no lines is refunded. Set estimate_only to get the price without being charged. For the full-game moneyline, spread and total use get_odds. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
odds
get_odds
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. Every game from 2019-20 on (and part of the 2019 playoffs): about 16 to 18 books a game from 2020-21 to 2023-24, about 6 in 2019-20, 8 in 2024-25 and 2025-26 (60+ on about 300 games in 2025-26), with all_books; a season answer defaults to the four main books. A season those four do not carry (2019-20) returns every book it has. Each line carries a source field (one value for opening and closing lines from August 2020, another for final per-book lines); a season answer lists each game's sources. Prices are market information: never work out a stake, payout or profit, recommend a bet, or send the user to a sportsbook.
players
search_players
Use when looking up a player by name. Searches 4,900+ players across every season since 2010-11. 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.
plays
get_plays
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.
predictions
get_predictions
Use for the model's win probability for each NHL game on the current slate: home and away win probability, the A/B/C confidence grade, start time, plus the model version and when the slate was generated. Takes no arguments (current slate only). Probabilities are the model's own; no odds, prices or goalie and injury notes are included. The accuracy note states the backtest figure and that it is not a live record. An empty slate costs nothing, and a note says why (not generated yet, or no games today); so does a failed call. Costs 5 credits.
schedule
get_schedule
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.
shifts
get_shifts
Use for who was on the ice and when: every player's shifts in one NHL game, each with period, start and end (period clock and seconds from the opening faceoff) and duration, plus the official boxscore time on ice and plus/minus. Filter to one team or player. NHL games from 2010-11 on. Costs 10 credits.
shot
get_shot_map
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.
situation
get_situation_time
Use for exact time at each strength: the seconds each team spent at 5v5, 5v4, 4v5, 4v4, 6v5 with the goalie pulled and every other on-ice state in an NHL game, split into regulation and overtime, from the shift charts. Also even / power-play / shorthanded totals, goalie-pulled seconds, period lengths and a completeness check against the play-by-play. include_players adds each skater's time by strength. One game by game_id (10 credits), or every game on a date (10 credits per game). NHL games from 2010-11 on.
skater
get_skater_season_stats
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. Seasons from 2010-11 on. Costs 5 credits.
standings
get_standings
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.
team
get_team_stats
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.
teams
list_teams
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.

Endpoints

URLTransportStateLatencyChecked
https://mcp.puckapi.com/mcp streamable-http answering 208 ms 2 min ago

Alternatives to PuckAPI

same job, measured the same way
Nhl MCP
by mrfentmen

Use this MCP server to the NHL. Team and player stats, standings, schedules, and game results....

52 installs/wk local only
EndzoneAPI
by noahowsh

NFL player props by sportsbook since 2023, plus play-by-play with EPA, stats and odds. REST and MCP.

26 tools answering
Lichess MCP
by mrfentmen

Use this MCP server to Lichess, chess puzzles by rating, player stats, and top players. Tools...

55 installs/wk local only
Theoddsapi MCP
by mrfentmen

MCP server for The Odds API: sports, events, betting odds. Free key.

93 installs/wk local only
Laudex
by laudex

Find MCP servers, APIs, tools and skills by intent. Free key: POST /api/agents/register

3 tools answering
Ryudi84
by ryudi84

MCP server for generating REST API boilerplate and Express endpoints.

46 installs/wk local only
Killbottleneck
by killbottleneck

Free-to-self-host goal and process maps for humans and AI agents, with REST API and MCP.

83 installs/wk local only
osu! MCP
by osyanne

MCP server exposing the osu! API v2: player stats, scores, beatmap search, rankings.

110 installs/wk local only

PuckAPI — questions

Answers built from our own checks of this server.

What can PuckAPI do?
It exposes 27 tools, read directly from the server on our last check. Among them: get_game_detail, get_game_probabilities, get_games, get_goalie_stats, get_head_to_head, get_line_movement and 21 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is PuckAPI mostly used for?
Its tools cluster around prop, player and game. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is PuckAPI working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 264 ms. The bar chart above shows every period we have measured.
How do I connect PuckAPI?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does PuckAPI need an API key?
No. PuckAPI completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 27 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is PuckAPI?
It answers our handshake in 264 ms on average, which is faster than 53% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is PuckAPI open source?
The code is open source: it is published under the MIT licence, written in JavaScript and 0 stars on GitHub. The licence covers the code in the repository, not the hosted service at mcp.puckapi.com, which runs on its operator's own terms.