Skip to main content
Glama
This connector has been deprecated

Moved to a server instead of a connector

Server Details

The hockey data API. Stats, odds, and everything between.

Ownership verified
Status
Healthy
Uptime
25.9% over 53 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.3/5.0

Scored across 16 tools

Disambiguation5/5

Each tool targets a clearly distinct resource or action: games, schedule, odds, line movement, players, goalies, skaters, teams, standings, plays, and shot maps. Apparent overlaps (get_games vs get_schedule; get_odds vs get_line_movement) are explicitly disambiguated in the descriptions with use-case and cost guidance.

Naming Consistency5/5

All tool names use snake_case and follow a predictable verb_noun pattern (get_*, list_*, search_*). The few non-get verbs (list_teams, search_players) are semantically appropriate and do not break the naming convention.

Tool Count4/5

With 16 tools, the server is slightly above the typical 3-15 ideal, but the count is reasonable for a comprehensive NHL stats and betting API. Each tool appears to cover a distinct data need, though it sits at the upper boundary before feeling heavy.

Completeness4/5

The core domain is well-covered: teams, schedules, games, standings, player/goalie/skater stats, odds, line movement, play-by-play, shot maps, and head-to-head matchups. Minor gaps exist, such as career/season-by-season player stats and some betting markets like player props, but major workflows are supported.

Available Tools

16 tools
get_game_detailA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
game_idYesNHL game ID (e.g. 2025020887)

Output Schema

ParametersJSON Schema
NameRequiredDescription
gameYes
oddsYes
away_teamYes
home_teamYes
goalie_startsYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, so the description adds real value beyond them: a 10-credit cost, the 2019-20+ odds coverage window, and the fact that goalie starts are derived from play-by-play and therefore absent for unplayed games. These are exactly the behavioral traits an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the use case and followed by prerequisites, coverage caveats, and cost. Nothing is wasted, though the 'with their time on ice' clause slightly restates what the return content already implies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description covers the remaining gaps an agent faces: ID sourcing, credit cost, and data-availability limits by date and game status. Complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds meaning by explaining where game_id comes from (get_games or get_schedule) and implying its scope. The league parameter is left to the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific resource ('one game') and enumerates exactly what it returns: both teams' full info, all betting odds, and starting goalies with time on ice. That enumeration distinguishes it from siblings like get_odds and get_goalie_stats without needing to name them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Opens with an explicit when-to-use ('Use when you need everything about one game'), tells the agent where to obtain the required ID (get_games or get_schedule), and gives a when-not: goalie starts are unavailable for upcoming games. This is close to ideal routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gamesA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoTeam abbreviation to filter (home or away)
limitNoMax results (default 100)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted.
date_toNoEnd date (YYYY-MM-DD)
date_fromNoStart date (YYYY-MM-DD)
game_typeNoFilter by game type
game_stateNoFilter by game state. FINAL and OFF both mean finished and return the same games; FUT is scheduled, LIVE in progress.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
gamesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real value beyond them: the cost (5 credits) and the comparative cost of the alternative, which affects tool selection. It stops short of noting rate limits or pagination behavior, but this is a filtered-read tool where that gap is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no waste: purpose, return shape, routing alternative plus its cost, and own cost. The routing guidance is front-loaded where an agent will see it before committing to the call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be detailed, yet the description still hints at the payload (scores, teams, venue, metadata). Combined with full schema coverage and clear routing guidance, an agent has everything needed to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 8 parameters documented in the schema including enum meanings and date formats, so the schema does the heavy lifting. The description adds no parameter-level detail beyond pointing at 'filters' generically, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('querying past or future games with filters') and enumerates what comes back (scores, teams, venue, game metadata). It clearly distinguishes itself from the sibling get_schedule by scope (past/future vs upcoming-only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use when querying past or future games with filters') and names the alternative with the condition that selects it ('For upcoming-only games, prefer get_schedule (2 cr) instead'). The when-to-use and when-to-prefer-something-else are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_goalie_statsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoFilter by team abbreviation
limitNoMax results (default 20)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason 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.
sort_byNoSort metric (default save_pct). gsax is goals saved above expected.
min_gamesNoMinimum games played (default 10)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
filtersYes
goaliesYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the read-only, closed-world safety profile; the description adds genuinely new behavioral facts: a cost of 5 credits, the exact metrics returned (GSAX, high-danger save%, rolling 10-game save%/GSAX, form trend, rest days), and a data-coverage nuance that goalie xG spans all strengths unlike the 5v5-only team possession columns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The usage trigger is front-loaded in the first clause, followed by a dense but tightly packed enumeration of outputs and the cost line. It is run-on in places but nearly every phrase carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, zero-required leaderboard tool with an output schema and read-only annotations, the description covers when to call it, what it returns, the nuance around xG coverage, and the credit cost. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters including defaults and enum values. The description's 'sorted by save%, GAA, GSAX, or wins, with a games-played filter' largely restates sort_by and min_games rather than adding syntax or edge-case guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('ranking goalies', 'goalie leaderboard') and states the sort metrics, which cleanly separates it from the skater-oriented siblings (get_player_stats, get_skater_season_stats). An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear trigger condition ('Use when ranking goalies or comparing goalie performance') and implies the games-played filter context. It does not explicitly name an alternative tool or a when-not-to-use case, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_head_to_headA
Read-only
Inspect

Use when comparing two teams' history. Returns recent matchups with win/loss record. Can filter by season or get all-time. Costs 10 credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax games to return (default 20)
team1YesFirst team abbreviation (e.g. BUF)
team2YesSecond team abbreviation (e.g. TOR)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Omit for all-time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
gamesYes
team1Yes
team2Yes
recordYes
total_gamesYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds valuable behavioral context: the credit cost (10 credits) and the ability to filter or get all-time, which goes beyond annotations. However, it doesn't detail pagination or return format, but output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with usage, then output, then filtering and cost. Every sentence earns its place with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool complexity, annotations, and output schema, the description is nearly complete. It covers when to use, what it returns, filtering options, and cost. Only minor gap is absence of explicit alternatives, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents all parameters including defaults and formatting. The description mentions filtering by season or all-time, which aligns with the schema's season parameter, but adds no new semantic detail. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (comparing) and resource (two teams' history), and clearly distinguishes from siblings like get_games or get_team_stats. The output focus on recent matchups with win/loss record is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear 'when to use' context: comparing two teams' history. It also distinguishes filtering by season vs all-time. Missing explicit when-not-to-use or alternative sibling names, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_line_movementA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
game_idYesNHL game ID
bookmakerNoFilter by specific bookmaker key (lowercase)

Output Schema

ParametersJSON Schema
NameRequiredDescription
game_idYes
movementYes
away_teamYes
home_teamYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds two traits not present in structured fields: cost (25 cr, the most expensive tool) and the result organization (time-series grouped by bookmaker). It stops short of stating time range, snapshot density, or pagination limits, which would matter for an expensive analytics call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose, return shape, cost, and alternative all front-loaded with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it still summarizes the grouping. Purpose, cost, and sibling routing are all covered for a low-complexity two-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented there including the lowercase bookmaker key convention. The description adds no syntax or format detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('how betting lines moved over time') and specifies the return shape ('time-series snapshots grouped by bookmaker'). The sibling get_odds is explicitly named as the contrasting tool, so an agent can route between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('analyzing how betting lines moved over time'), explicit when-not plus alternative ('If you only need current lines, use get_odds (10 cr) instead'), and cost differentials to support the choice. This is textbook routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_oddsA
Read-only
Inspect

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 12-14 books a game from 2020-21 to 2023-24, 6-7 in 2019-20, 4 in 2024-25, 60+ in 2025-26 with all_books. A season those four do not carry (2019-20) returns every book it has. Each line says its source: the_odds_api (our Odds API pulls, from August 2020) or espn (ESPN's per-book lines); a season answer lists each game's sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoWith season: only this team's games (abbreviation, e.g. BUF).
limitNoWith season: games per page (default 100, max 500).
offsetNoWith season: page offset; use next_offset from the previous page.
seasonNoSeason for a whole season of lines, e.g. 2025-26 or 20252026. Used when game_id is not set.
game_idNoNHL game ID (e.g. 2025020887). Omit and pass season for a whole season.
all_booksNoWith season: every book held (12-14 a game from 2020-21 to 2023-24, more than 60 on about 300 games in 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET.
bookmakerNoFilter by bookmaker key (e.g. draftkings, fanduel, betmgm). Lowercase.
estimate_onlyNoReturn what this call would cost, without charging or running it.
snapshot_typeNoopening (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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
oddsNo
toolNo
countNo
gamesNo
seasonNo
columnsNo
creditsNo
game_idNo
away_teamNo
game_dateNo
home_teamNo
next_offsetNo
total_gamesNo
estimate_onlyNo
snapshot_typeNo
bookmaker_countNo
credits_per_gameNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true and openWorldHint=false; the description adds substantial non-obvious behavior: credit pricing (10/game, ~13,700 for a season), that estimate_only avoids charging, per-season book coverage counts, and provenance tagging (the_odds_api vs espn). This is exactly the cost/quota/disclosure context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded correctly with when-to-use and cost, but the middle is a dense run-on of parenthetical figures (cost totals, per-season book counts) and the book-count figures are duplicated verbatim in the all_books schema description. The provenance sentence at the end is also clipped and hard to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with two operating modes and an output schema already covering return values, the description supplies mode routing, pricing, pagination defaults, and data-coverage caveats. Only the error behavior when neither game_id nor season is supplied is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema only hints at: game_id and season are alternatives ('used when game_id is not set'), team/all_books/snapshot_type only apply in season mode, and each book's line array follows the columns order.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource (retrieve betting lines/odds) and goes further by spelling out the two retrieval modes and what each returns. It never distinguishes itself from the sibling get_line_movement, which an agent could easily confuse with odds retrieval, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit mode-selection guidance ('Pass game_id for one game ... Or pass season ... for a whole season'), plus the cost-saving estimate_only path. It does not name or exclude any sibling (e.g. get_line_movement for movement over time), so usage is clear but has no explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_player_game_logA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax games to return (default 100)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
offsetNoPagination offset
seasonNoSeason ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to the most recent season with stats for this player, which is the current season once it is under way and the previous one before that. The season actually used is echoed back in the response.
game_typeNoWhich games to include: regular, playoff, preseason, or all. Defaults to regular, matching every other stats tool.
player_idYesNHL player ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countYes
gamesYes
playerYes
seasonYes
game_typeYes
next_offsetYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, so the description carries real weight and does: it discloses the data provenance ('built from play-by-play') and the resulting gaps ('time on ice and plus/minus ... come back null; goalie time on ice is available only for games the goalie started'). It also notes the season actually used is echoed in the response, which sets expectations about return content and cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use condition and the key exclusion, then the field lists, then caveats and prerequisites. The two stat enumerations are long but earn their place by letting an agent verify the tool returns the metric it needs. Slightly dense, but no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is not owed, yet the description still preempts the most likely support question (missing TOI/plus-minus) that an output schema alone would not explain. Combined with prerequisites, cost, and the season-echo behavior, nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, with league, game_type, season, limit and offset all documented in-schema including defaults and formats. The description adds no syntax or constraint detail beyond that, so the baseline 3 applies; its value is in describing output content rather than parameter behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific trigger and resource: 'a player's game-by-game stat lines for a season, not a season total.' That negative clause immediately separates it from the season-total siblings (get_player_stats, get_skater_season_stats). It then enumerates the exact stat columns returned for skaters and goalies, so the agent knows precisely what this tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the when ('game-by-game stat lines for a season'), the when-not ('not a season total'), and the prerequisite ('Requires player ID from search_players'), which chains it to the correct sibling for ID lookup. It also surfaces the cost ('Costs 5 credits'), which is decision-relevant for an agent weighing alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_player_statsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
player_idYesNHL player ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
playerYes
goalie_statsYes
skater_statsYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, openWorldHint=false), so the bar is lower. The description adds genuinely useful non-schema context: a 5-credit cost and the dependency on search_players for the ID. No access/permission or rate details, but the cost disclosure is real behavioral value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded trigger first, then a tight enumeration of returned fields, then prerequisites and cost. Three sentences, all earning their place, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, yet listing them helps an agent pick this tool over the specialized stat tools. Combined with the cost and ID-source notes, the definition is complete enough to invoke correctly; only sibling differentiation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (league enum, player_id) are fully documented in the schema. The description only adds that the ID comes from search_players; it does not explain the league parameter's impact on results, so baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('full details for one player') and enumerates exactly what is returned, split by skater vs goalie. It is clearly distinguishable from generic stat lists, though it never names the sibling tools (get_goalie_stats, get_skater_season_stats) that overlap with its output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger ('Use when you need full details for one player') and a hard prerequisite ('Requires player ID from search_players'), which routes the agent through the correct lookup first. It offers no when-not guidance or comparison to the specialized stats siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_playsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoTeam abbreviation that owns the event (e.g. BUF)
typeNoEvent type
zoneNoZone: O offensive, N neutral, D defensive
limitNoMax events (default 200)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
offsetNoPagination offset
periodNoPeriod number (4+ is overtime)
seasonNoSeason ID, 8-digit (e.g. 20242025).
game_idNoNHL game ID (e.g. 2025020887)
strengthNoSkater strength from the event owner's view, e.g. 5v5, 5v4, 4v5
player_idNoNHL player ID; matches the player in any role on the event
shot_attempts_onlyNoOnly goals, shots on goal, missed shots and blocked shots (Corsi events)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
playsYes
summaryYes
next_offsetYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real non-obvious context: the 10-credit cost, the at-least-one-identifier precondition, and offset-based pagination. Return-format detail is largely redundant since an output schema exists, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with purpose then filters then preconditions then cost. Every clause carries information (event inventory, filter list, gating rule, pagination, price) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, mostly-optional query tool with full schema coverage and an output schema, the description supplies exactly the missing pieces: what the tool is for, the required-identifier rule, and cost. Nothing an agent needs to invoke it correctly is omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds a semantic constraint absent from the schema (which declares zero required params): at least one of game_id, season, or player_id must be supplied, plus 'player (any role)' and 'offset' pagination semantics. That is meaningful meaning beyond the field-level docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('play-by-play events') and then enumerates the concrete payload (goals, shots, faceoffs, hits, rink coordinates, strength state, zone, players), which lets an agent distinguish it from siblings like get_shot_map or get_game_detail without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the triggering condition clearly ('Use for play-by-play events') and gives a hard gating rule ('Requires at least one of game_id, season or player_id') plus pagination guidance. It stops short of naming an alternative tool or saying when *not* to use it, so it earns 4 rather than 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_scheduleA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days ahead to look (default 7)
teamNoTeam abbreviation to filter
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
upcoming_gamesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), so the description's main added value is the credit cost and the 'unplayed future games only' filtering behavior, which are not in the annotations. It stops short of describing pagination or result limits, so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: trigger, core behavior, routing alternative, plus a cost note. The most decision-relevant information (upcoming-games scope) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description needn't explain return values, and it covers the key behavioral facts an agent needs (future-only scope, default window, credit cost, alternative tool). Complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the days parameter (default 7, max 30), team abbreviation, and league enum all documented in the schema. The description restates the default-7 window but adds no format or syntax detail beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (checking upcoming games) plus exact scope: only unplayed future games for the next N days. It explicitly names the sibling it is not (get_games for past games), so an agent can differentiate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('Use when checking what games are coming up'), an explicit exclusion/alternative ('For past games, use get_games instead'), and a cost caveat ('Costs 2 credits'). Nothing about when to select this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shot_mapA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoTeam abbreviation; use with season
limitNoMax shots per page (default 1000)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl, ahl.
offsetNoPagination offset; follow next_offset for a full season
seasonNoSeason ID, 8-digit (e.g. 20242025); use with team
game_idNoNHL game ID
strengthNoStrength filter, e.g. 5v5
player_idNoNHL player ID of the shooter

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
shotsYes
summaryYes
next_offsetYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint, so the description adds real behavioral context a caller needs: pagination mechanics ('follow next_offset'), the fact that pages are chronological, that a season exceeds one page, and the 10-credit cost. It stops short of describing failure modes or rate limits, but this is well beyond the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the selection condition, then filter options, then pagination and cost. Every clause carries information an agent needs; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values are covered elsewhere; the description supplies the operational details an agent needs to actually page through a season and budget credits. No meaningful gap remains for an 8-parameter, zero-required read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds the combination logic the schema only hints at ('game, or by season plus a team or player') plus the chronological page ordering, which tells the agent how offset behaves in practice. It does not explain strength or league semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('every shot attempt with rink coordinates, shot type, strength, shooter and goalie') and explicitly positions it against an alternative ('rather than a list of events'), which cleanly separates it from siblings like get_plays and get_line_movement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the when-to-use condition up front ('Use when you want shot locations rather than a list of events') and spells out the two valid filter shapes: by game, or by season plus team or player. Nothing about selection is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_skater_season_statsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoFilter by team abbreviation
limitNoMax results (default 20)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason 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.
sort_byNoSort metric (default points)
min_gamesNoMinimum games played (default 10)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
filtersYes
skatersYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: a 5-credit cost, the 2010-11 season floor, and the fact that the returned stat set includes power play/shorthanded production, shooting%, faceoff%, and TOI. No pagination or defaulting caveats beyond the schema, which is the only gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition, then answers question, then contents, then constraints and cost. Every sentence carries information, though the stat-category enumeration is somewhat redundant against the existing output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a fully-defaulted, zero-required-parameter list endpoint with an output schema and readOnly annotations, the description supplies everything else an agent needs: when to use it, cost, season coverage, and the shape of the leaderboard. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including enum values and the nuanced default-season behavior, so the baseline is 3. The description restates the sort metrics ('points, goals, assists, plus/minus, or shots') and the games-played filter but adds no syntax, units, or edge-case meaning the schema does not already carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns a leaderboard' of skater scoring stats) and scopes it to ranking/comparison use, which cleanly separates it from get_player_stats (individual lookups) and get_goalie_stats (different population). An agent can pick it correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when ranking skaters or comparing scoring' gives a clear positive trigger condition. It does not, however, name the sibling it is not (e.g. get_player_stats for a single player's line) or state exclusions, so it falls short of the explicit when/when-not bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_standingsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season.
divisionNoFilter by division (e.g. Atlantic, Metropolitan, Central, Pacific)
conferenceNoFilter by conference

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
standingsYes
snapshot_dateYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a read-only, closed-world call. The description goes beyond them by disclosing the credit cost (2 credits), the default season behavior, and a data-scope caveat that 5v5 possession metrics will not match a goalie's all-strength expected goals against.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the use case, followed by returns, then the caveat and cost. Every sentence is informative, though the long enumeration of stat columns is dense relative to what the output schema likely already conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter coverage, the description needs only to frame the scenario, defaults, and cost, all of which it does. Nothing an agent needs to invoke this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so league, season, division, and conference are all self-documented with formats, enums, and defaults. The description adds no parameter-level detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence ('Use when checking where teams rank in their division or conference') gives a specific verb-like action and resource, and immediately enumerates the returned fields. An agent can distinguish it from get_team_stats or get_goalie_stats without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the scenario that should trigger the tool and notes that it defaults to the most recent season with standings. It does not name an alternative tool or state when not to use it, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_team_statsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam abbreviation (e.g. BUF, TOR, NYR)
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
seasonNoSeason ID, 8-digit (e.g. 20242025 for 2024-25). 2024-25 and 2024-2025 also accepted. Defaults to current season.

Output Schema

ParametersJSON Schema
NameRequiredDescription
teamYes
seasonYes
current_statsYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds a useful scoping note that possession is 5v5 only and states a cost (5 credits), which is real behavioral context. However, it doesn't mention caching, rate limits, or season/league default behavior beyond what the schema says.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary use case, followed by metric scope and the cost note. Every sentence is short and carries actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema already defined, the description needn't explain return structure. It covers usage, prerequisites (abbreviation, list_teams fallback), scoping granularity, and cost – everything an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented. The description adds a partial hint ('Requires a team abbreviation') and a referral to list_teams, but does not clarify league/season format beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('get full details for one team') and enumerates the exact metrics returned (record, goals for/against, league rank, 5v5 possession). Clearly distinguishable from siblings like get_player_stats or get_standings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use when you need full details for one team' and routes to list_teams when the abbreviation is unknown. Provides a clear activation condition and an alternative for disambiguation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_teamsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
divisionNoFilter by division
conferenceNoFilter by conference

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
teamsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds behavior the annotations do not: historical franchises are excluded from results, and the call costs 1 credit. Return format is not described, but an output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence front-loads the usage condition, then appends the scope exclusions and the cost note. Every clause carries information an agent can act on; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter list tool with a 100%-covered schema and an output schema, the description supplies the essentials: purpose, cost, and data-scope exclusions. The one notable omission is any hint that the tool spans eight leagues rather than just the NHL, which matters for cross-league questions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with league, division, and conference all documented and two enum-backed, so the baseline is 3. The description never mentions filtering by league, division, or conference; the fields it lists (city, conference, division, arena) are result fields, not parameters, so it adds no parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource (team list) with its return fields (city, conference, division, arena) and names the excluded historical franchises (ATL, ARI). It is clearly distinguishable from every sibling, none of which list teams. However, it frames the tool as 'all 32 active NHL teams' while the schema accepts eight leagues (pwhl, ohl, whl, qmjhl, echl, ahl, ushl), so the stated scope under-describes the tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when you need team abbreviations' gives a clear triggering condition, and 'Cheapest tool at 1 credit' adds cost context useful for tool selection. It stops short of naming an alternative or stating when not to use it, but no sibling overlaps enough for that to be a serious gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_playersA
Read-only
Inspect

Use when looking up a player by name. Searches 4,800+ 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamNoFilter by team abbreviation
limitNoMax results (default 10)
queryYesPlayer name to search for (partial match supported)
activeNoFilter by active status (default: true). Set false to search active plus retired/historical players.
leagueNoLeague. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl.
positionNoFilter by position

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
countYes
playersYes
included_inactiveYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely non-structured context: dataset size and temporal coverage (4,800+ players since 2010-11), the default filtering behavior (active only, active=false for retired/historical), and a cost signal ('Costs 2 credits'). It doesn't discuss rate limits or result-shape, but with an output schema present that is minor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five short sentences, each earning its place: trigger, scope, default behavior, next-step workflow, and cost. The most important information (when to use it) is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter search tool with an output schema and safety annotations, the description covers triggers, defaults, dataset scope, cost, and the chained workflow, so an agent has enough to call it correctly. Minor gaps remain around pagination/limit behavior and empty-result handling, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with 6 documented parameters (including enum lists for league and position), so the schema carries the parameter burden. The description only re-states the active default and partial-match searching for query, adding no syntax or format detail beyond the schema; baseline 3 is correct here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('looking up a player by name', 'Searches 4,800+ players across every season since 2010-11') and implicitly separates the discovery role from retrieval tools by directing the agent to get_player_stats for details. An agent can distinguish it from get_player_stats without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when looking up a player by name' is a clear trigger, and the follow-up instruction ('Use the returned player ID with get_player_stats') gives explicit workflow routing to the sibling tool. It lacks an explicit when-not (e.g., 'if you already have a player ID, call get_player_stats directly'), so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedget_line_movement1 field changed
      • addedOutput schema / properties / movement / additionalProperties / items / properties / source
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  2. 14 tool updates
    • Changedget_game_detail2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_games2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_goalie_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_head_to_head2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_player_game_log2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_player_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_plays2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_schedule2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_shot_map2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl, ahl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "qmjhl",
        +  "echl",
        +  "ahl"
        +]
    • Changedget_skater_season_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_standings2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedget_team_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedlist_teams2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
    • Changedsearch_players2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl, ahl, ushl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl",
        -  "ohl",
        -  "whl",
        -  "qmjhl",
        -  "echl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl",
        +  "ahl",
        +  "ushl"
        +]
  3. 1 tool update
    • Changedget_odds1 field changed
      • changedInput schema / properties / all_books / description
        Previous value: -"With season: every book held (12-14 a game from 2020-21 to 2023-24, 60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET."New value: +"With season: every book held (12-14 a game from 2020-21 to 2023-24, more than 60 on about 300 games in 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET."
  4. 15 tool updates
    • Changedget_game_detail2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_games2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_goalie_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_head_to_head2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_odds1 field changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "type": "string"
        +}
    • Changedget_player_game_log2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_player_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_plays2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_schedule2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_shot_map2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_skater_season_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_standings2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedget_team_stats2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedlist_teams2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
    • Changedsearch_players2 fields changed
      • changedInput schema / properties / league / description
        Previous value: -"League. Defaults to nhl. One of: nhl, pwhl."New value: +"League. Defaults to nhl. One of: nhl, pwhl, ohl, whl, qmjhl, echl."
      • changedInput schema / properties / league / enum
        Previous value: -[
        -  "nhl",
        -  "pwhl"
        -]New value: +[
        +  "nhl",
        +  "pwhl",
        +  "ohl",
        +  "whl",
        +  "qmjhl",
        +  "echl"
        +]
  5. 1 tool update
    • Changedget_odds1 field changed
      • changedInput schema / properties / all_books / description
        Previous value: -"With season: every book held (60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET."New value: +"With season: every book held (12-14 a game from 2020-21 to 2023-24, 60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET."
  6. 1 tool update
    • Addedget_player_game_log
  7. 13 tool updates
    • Changedget_game_detail1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_games1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_goalie_stats1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_head_to_head1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_player_stats1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_plays1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_schedule1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_shot_map1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_skater_season_stats1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_standings1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedget_team_stats1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedlist_teams1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
    • Changedsearch_players1 field changed
      • addedInput schema / properties / league
        Added value: +{
        +  "description": "League. Defaults to nhl. One of: nhl, pwhl.",
        +  "enum": [
        +    "nhl",
        +    "pwhl"
        +  ],
        +  "type": "string"
        +}
  8. 1 tool update
    • Changedget_odds1 field changed
      • changedInput schema / properties / snapshot_type / description
        Previous value: -"opening (game-day morning) or closing (final pre-game). Single game: default both. Season: default closing."New value: +"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."
  9. 1 tool update
    • Changedget_games1 field changed
      • changedInput schema / properties / game_state / description
        Previous value: -"Filter by game state"New value: +"Filter by game state. FINAL and OFF both mean finished and return the same games; FUT is scheduled, LIVE in progress."
  10. 1 tool update
    • Changedget_odds21 fields changed
      • addedInput schema / properties / all_books
        Added value: +{
        +  "description": "With season: every book held (60+ from 2025-26) instead of DraftKings, FanDuel, BetMGM and ESPN BET.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / estimate_only
        Added value: +{
        +  "description": "Return what this call would cost, without charging or running it.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / game_id / description
        Previous value: -"NHL game ID (e.g. 2025020887)"New value: +"NHL game ID (e.g. 2025020887). Omit and pass season for a whole season."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "With season: games per page (default 100, max 500).",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "With season: page offset; use next_offset from the previous page.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / season
        Added value: +{
        +  "description": "Season for a whole season of lines, e.g. 2025-26 or 20252026. Used when game_id is not set.",
        +  "type": "string"
        +}
      • changedInput schema / properties / snapshot_type / description
        Previous value: -"Filter by snapshot type: opening (game-day morning lines) or closing (final pre-game lines). Default returns both."New value: +"opening (game-day morning) or closing (final pre-game). Single game: default both. Season: default closing."
      • addedInput schema / properties / team
        Added value: +{
        +  "description": "With season: only this team's games (abbreviation, e.g. BUF).",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "game_id"
        -]
      • addedOutput schema / properties / columns
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / credits_per_game
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / estimate_only
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / games
        Added value: +{
        +  "items": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / next_offset
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / season
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / snapshot_type
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / tool
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / total_games
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "game_id",
        -  "home_team",
        -  "away_team",
        -  "game_date",
        -  "odds",
        -  "bookmaker_count"
        -]
  11. 15 tool updates
    • First observedget_game_detail
    • First observedget_games
    • First observedget_goalie_stats
    • First observedget_head_to_head
    • First observedget_line_movement
    • First observedget_odds
    • First observedget_player_stats
    • First observedget_plays
    • First observedget_schedule
    • First observedget_shot_map
    • First observedget_skater_season_stats
    • First observedget_standings
    • First observedget_team_stats
    • First observedlist_teams
    • First observedsearch_players

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    24 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources