MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Other

Keel Stats

NBA and NFL stats: profiles, head-to-head, schedules, ratings, EPA, injuries, projections.

Checks passed
13 / 22

1 failed · 8 not measured

Median response
736 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
12

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
312

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 736 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name Keel Stats.

  • Pass
    Lists tools

    tools/list returned 12 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 736 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 736 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    43 of 43 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-06T13:45:43.283413Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using Keel Stats

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http keel-stats https://api.keelstats.com/mcp

Capabilities

Tools 12

defense_vs_position

Use this when the user asks which teams allow the most or fewest to a position ('best matchups for centers', 'defenses vs TE'). Returns what each NBA or NFL team allows per game to a position group (NBA: G, F, C, with pace rank; NFL: QB, RB, WR, TE), each number as [value, league rank] (1 = allows the most). Without `position` the NBA answer lists each group's ten softest teams (`data_more` counts the rest) and the NFL's the softest half: pass `position` for every team, as for the fewest allowed. Window 'recent' (last 10 games) needs Pro. Not for one player's matchup (player_profile's next game).

Discovered
find_game

Use this when the user asks about one team's game on a date, its next or last game, or a specific meeting ('Lakers next game', 'Cowboys vs Eagles on November 23') and you need its game_id. Returns the team's game on that date, or its last three finished and next three games, with game_id, start time, state, week (NFL), each side's team (id and abbreviation) and score, and the pair's matchup page; each game's page is `game_url` with its id in place of {id}. Not for the whole slate (tonight_slate) or the history of a pair (head_to_head).

Discovered
game_projection

Use this when the user asks who is favoured in one game, by how much, or how the two sides compare for it. Returns the pre-game win probability (NBA: our projection, blended with the market while the model learns; `prediction.blended` says when) and projected margin, the consensus spread and total, the teams compared, leaders, recent form and who is out; signed in, also the market's vig-free chance, the model against it and the line, and the head-to-head; with Keel Stats Pro the absence costs, position matchups, records against the close and key players, and with `detail` "full" the model's factor weights. The answer's `account.held` names what the caller's plan left out. Needs a game_id from tonight_slate or find_game. Not for picks or betting advice: Keel Stats gives neither.

Discovered
head_to_head

Use this when the user asks how two teams have fared against each other: the all-time or season series, their last meetings and who led them, their next meeting ('Celtics vs Knicks history', 'Cowboys Eagles record'). Returns the pair's record over every meeting we hold and by season, this season's series, the last ten meetings with each one's top player, the series leaders, and the next game with its projected chance and margin. Not for a single game's preview: use game_projection with the game_id it returns.

Discovered
injury_consequences

Use this when the user asks who is out, what an absence changes, or who benefits when a player sits ('Lakers injury report', 'what if Haliburton is out'). Returns the league injury report, or for a player_id the shift in his team's win probability and spread and the teammates whose minutes or target/carry share rises. Not for a player's own injury status alone (player_profile has it).

Discovered
player_profile

Use this when the user asks about one player's season or recent form ('Tatum stats', 'how is Bridges playing lately'). Returns season averages, efficiency (NBA: TS%, eFG%, USG%, BPM; NFL: yards, touchdowns, EPA), Keel Impact, current injury status, his recent box lines (five without an account, ten signed in) and, when the books have priced his next game, one compact row per stat as props_research gives it. With Keel Stats Pro, `detail` adds the book-by-book odds, closing lines, game log, history and alternate ladders. The answer's `account.held` names what the caller's plan left out. Not for on/off or teammate splits (player_splits_and_on_off).

Discovered
player_splits_and_on_off

Use this when the user asks how a player's team does with him on or off the floor, his clutch or garbage-time splits, or how he plays with or without a teammate (NFL: target, carry and red-zone shares with or without a teammate). Returns those splits for the season (NBA: on/off, situations and milestones, `detail` naming the ones wanted; NFL: his usage row and the team's busiest, `detail` "full" for every player). Requires Keel Stats Pro; the answer says so when the account has none. Not for season averages or recent games: use player_profile.

Discovered
props_research

Use this when the user asks about a player's prop lines, how often he clears a line, or today's prop board. Returns, for a player_id, one compact row per stat with a line for his next game: the consensus line and book count, his last five games against it (`l5`, values newest first) and his season average; signed in, the last ten (`l10`, newest first) and his record against the closing line; with Keel Stats Pro also L20 and season hit rates, the opening line and move, the model's probability against the market's, the best price at the consensus line (`best_over`/`best_under` name their line; a better line at another book follows as `other_line`) and the matchup, and with `detail` the book-by-book odds, closing lines, game log, history and alternate ladders. Without a player_id, today's prop board: `recent` is the last five values newest first, `status` the injury report's (questionable, doubtful…), `minutes_l5` and `fga_l5`/`tpa_l5` the last five games' minutes and attempts; players ruled out are listed in `ruled_out`, not in the rows (Pro: model edge, the daily cheat sheet and the `consistent` filter). The answer's `account.held` names what the caller's plan left out. Not for picks: it is research only and never gives a pick.

Discovered
rankings_and_ratings

Use this when the user asks for a league-wide list: standings, NBA Keel Impact player ratings, NFL EPA per play for offenses and defenses, or weekly power rankings ('top 10 NFL defenses by EPA'). Returns the ranked list with the url of its table (Pro adds the ratings' offense/defense, box prior, RAPM and on/off parts). Not for one team or player: use their profile.

Discovered
search

Use this when you need a player_id or team_id, or the user names a player or team you have not resolved yet ('Jokic', 'Lamar Jackson', 'BOS'); it is accent- and typo-tolerant. Returns up to six matching players and four teams per league with their numeric ids (`players_more` and the like say there are more: narrow the query); each list's page is a template such as `player_url` with the id in place of {id}. Not for stats: call player_profile or team_profile with the id.

Discovered
team_profile

Use this when the user asks about one team's season: its record, ratings, roster, recent and coming games. Returns the record, offensive/defensive/net rating (NFL: EPA per play and success rate) with league ranks, the roster and the last and next games with their game_id. Not for the whole league's standings (rankings_and_ratings) or two teams' history (head_to_head).

Discovered
tonight_slate

Use this when the user asks what is on tonight, today's scores, or a given day's games ('NBA games on 2026-11-05'). Returns that day's games with game_id, teams (id and abbreviation), times (US Eastern), live or final scores, pre-game win probabilities (NBA: our projection, blended with the market while the model learns) and the consensus line (signed in: the market's chance and the model's edge), last-game starters (NBA) and recent injury status changes; each game's page is `game_url` with its id in place of {id}. Not for a game weeks away or one team's schedule: use find_game.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected736 ms12