stat-api — Sports Data
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
NFL/NBA/MLB/NHL/PGA + DFS and prediction-market data. Browse free; query with a free API key.
| Author | com.stat-api |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 145 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"stat-api — Sports Data": {
"url": "https://api.stat-api.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (9)
list_leaguesread-onlyList every league/data group this API serves (nfl, nba, mlb, nhl, pga, dfs, reference) with table counts and availability. No credentials needed. Start here, then call list_tables.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_tablesread-onlyList every queryable table in one league with a one-line summary each. No credentials needed. Follow with describe_table before querying.
Parameters:
league(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
describe_tableread-onlyFull contract for one table: fields with types and descriptions, the filters query_table accepts (with operators like __gte/__lte/__between/__like and required filter combinations), page-size limits, primary key, and a runnable example URL. No credentials needed. Always call this before query_table — filters not listed here are rejected.
Parameters:
league(required) — stringtable(required) — string
Hints: read-only yes · destructive no · idempotent yes · open-world no
query_tableread-onlyQuery any table. Returns `{"<table>": [rows], "limit": N, "next_from_id": M|null, "has_more": bool}`. To read every row, start with from_id=0 and re-call with from_id set to the previous next_from_id until it is null. A call without from_id returns the first page in the table's default sort with next_from_id null. filters is a flat object of `field` or `field__op` keys from describe_table (e.g. {"season_id": 2024, "day__between": "20250101,20250131"}). Requires a stat-api account: sign in when the app asks (free account at https://stat-api.com), or send an API key as Authorization: Bearer <key>. Every returned row counts against the monthly record quota.
Parameters:
league(required) — stringtable(required) — stringlimit— integerfilters— object — field or field__op keys → scalar values; see describe_tablefrom_id— integer — keyset cursor: 0 for the first page of a full walk, then the previous next_from_id
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_recordread-onlyFetch a single row by primary key. Returns the row object. Requires a stat-api sign-in or API key; costs 1 record of quota.
Parameters:
league(required) — stringtable(required) — stringid(required) — string — primary-key value (integer or text PK)
Hints: read-only yes · destructive no · idempotent yes · open-world no
search_playersread-onlyFuzzy player-name search (typo-tolerant). Currently NBA only — for other leagues query the players table with a name filter via query_table. Returns player rows ordered by match quality. Requires a stat-api sign-in or API key; rows count against quota.
Parameters:
name(required) — stringlimit— integerleague— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
games_on_dateread-onlyGames scheduled/played on one calendar date (US-Eastern) for nba, mlb, or nhl; defaults to today. Returns the same envelope as query_table on the games table. NFL is week-based, not date-based — for nfl, use query_table on nfl/games with season_id + week filters instead. Requires a stat-api sign-in or API key; rows count against quota.
Parameters:
league(required) — stringdate— string — YYYY-MM-DD; defaults to today in US-Eastern time
Hints: read-only yes · destructive no · idempotent yes · open-world no
graphql_queryread-onlyRun a GraphQL query against the same data with relations — nest from a game to its teams/players/odds in one call. Root fields are leagues (nfl, nba, …), each exposing its tables with the same filter arguments as REST plus `first`/`after` pagination. Do NOT send introspection queries (the schema is huge) — use describe_table instead; the SDL is at https://api.stat-api.com/api/v1/graphql/sdl. Requires a stat-api sign-in or API key; every row resolved anywhere in the tree counts against quota.
Parameters:
query(required) — stringvariables— object
Hints: read-only yes · destructive no · idempotent yes · open-world no
api_usageread-onlyYour account's quota position: plan, monthly record limit, records used, remaining, and when the quota resets. Requires a stat-api sign-in or API key; costs 1 record.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.