maxpreps-mcp
Read-only MCP server for MaxPreps high school sports data: search schools and athletes, then pull schedules, scores, rosters, stats, rankings, standings, and raw page data.
Search for schools or athletes by name and get canonical paths for further lookups.
List every team a school publishes, with sport/gender/level filters.
Get school profiles, nearby schools, association info, and articles.
Fetch team season records, standings, rankings, and available seasons.
Get schedules with scores oriented team-vs-opponent, with optional filters for completed/upcoming and deleted contests.
Get rosters with jersey, class, positions, height, weight; deleted entries hidden by default.
Get team stat leaders and athlete career pages.
Browse national or state team rankings and see where a single team ranks.
View full conference standings for a team.
List stat leaderboard categories and fetch ranked stat leaderboards.
Check MaxPreps connectivity/build status with a healthcheck.
Fetch raw server-rendered page data for anything not covered by dedicated tools.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@maxpreps-mcp Get the football schedule for Myers Park High School"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
maxpreps-mcp
MCP server for MaxPreps — read any US high school's team schedules, scores, records, rosters, stat leaders and athlete careers.
Developed and maintained by AI (Claude Code). Use at your own discretion.
No account, no API key, no browser extension. MaxPreps serves its pages with Next.js, and every public page has a companion JSON route carrying the same data the page was rendered from. This server reads those routes directly over plain HTTPS, so it works anywhere Node runs.
Install
npx maxpreps-mcpOr add it to an MCP host:
{
"mcpServers": {
"maxpreps": {
"command": "npx",
"args": ["-y", "maxpreps-mcp"]
}
}
}Related MCP server: College Basketball Stats MCP Server
Tools
All fifteen are read-only; this server has no write path.
Tool | What it does |
| Find a school or athlete by name — start here |
| Every team path a school publishes, with sport/gender/level |
| School profile, identifiers, association, nearby schools |
| Season record, standings, rankings, and available seasons |
| Games with results and scores, plus a computed record |
| Players with jersey, class, positions, height, weight |
| Statistical leaders with qualifying minimums |
| Ranked leaderboard for a sport, national or by state |
| Where one team ranks nationally, by state, division, metro |
| Conference table with every team's record |
| Which stat leaderboards exist, and their paths |
| Ranked athletes for one stat, statewide or national |
| One athlete's career page |
| Connectivity plus site build-id resolution |
| Raw page data for anything the above doesn't cover (roster rows are projected to public fields) |
Typical flow
Paths are not guessable, so resolve before you fetch:
maxpreps_search "myers park"→ the school'scanonicalUrlmaxpreps_list_teamson that path → real team pathsmaxpreps_get_schedule/_roster/_stat_leaders/_standingson a team path
To go the other way — discovering teams and athletes rather than looking one up —
maxpreps_get_rankings and maxpreps_get_stat_leaderboard return ranked lists whose entries
each carry a teamPath you can feed straight back in. Stat leaderboard paths are not
guessable either, so list the categories first.
Prior seasons are a season argument ("25-26"); roughly 20 years are available.
Configuration
Everything is optional — the server works with no configuration at all.
Variable | Default | Purpose |
| built-in | Override the User-Agent sent to MaxPreps |
|
| Seconds to reuse a fetched page; |
|
| Minimum spacing between requests |
|
| Per-request timeout |
Things worth knowing
These are properties of MaxPreps' data, and each one has bitten a naive reading:
Scores are winner-first in the raw data. MaxPreps renders a loss as
"L 20-13"even when the team scored 13. TheteamScore/opponentScorefields this server returns are always oriented team-vs-opponent.Rosters and schedules carry hidden rows. A meaningful minority are flagged deleted and the site does not render them — the 2025-26 Myers Park football roster has 87 entries behind 63 visible players. They are excluded by default.
An out-of-season team is not a broken one. Before opening day the current season legitimately has an empty roster and no results; ask for a prior season.
Search is literal.
"myers park"finds the school;"myers park high"finds nothing. Drop qualifiers before concluding a school is absent.Statewide scoreboards aren't available.
/<st>/<sport>/scores/renders its game list client-side from a route that has no server-rendered payload. Per-team schedules are the supported way to get scores;maxpreps_get_rankingsis the way to see a whole state's teams at once.
Shell-only alternative
The repo also ships a maxpreps skill (skills/maxpreps/) that reaches the same
data through curl + a small decoder, with no server to run. If you only ever use
Claude Code on one machine, the skill alone may be all you need; the MCP server is
what makes this reachable from claude.ai, a phone, or any other client.
Development
npm install
npm run build
npm testdocs/MAXPREPS-API.md pins the captured request/response shapes, the positional
key maps, and how to re-derive them if MaxPreps changes its bundle.
Etiquette
This reads an undocumented surface on someone else's site on behalf of one user. Requests are spaced and responses cached by default. Please keep it that way.
License
MIT
Available Tools
15 toolsmaxpreps_get_athleteGet a MaxPreps athlete careerARead-onlyIdempotent
One athlete’s career page: season history, sports played, and available data. Pass the careerCanonicalUrl from maxpreps_search verbatim — it carries the required careerid parameter, without which the page cannot be addressed. Read-only.
Inputs: athlete (required), careerId.
maxpreps_get_pageGet raw MaxPreps page dataARead-onlyIdempotent
Escape hatch: return the raw server-rendered data for any public MaxPreps page, undecoded. Use when a dedicated tool does not cover what you need (playoff brackets, conference standings, article listings). Note that positional payloads — team rosters and schedules — arrive as bare arrays here with no field names; use maxpreps_get_roster / maxpreps_get_schedule for those. Roster rows (athleteData) are always projected to public roster fields (name, jersey, positions, class, height, weight). Read-only.
Inputs: path (required), keysOnly.
maxpreps_get_rankingsGet MaxPreps team rankingsARead-onlyIdempotent
Ranked leaderboard of teams for a sport — nationally, or within one state. Each entry carries the rank, rating, overall record, movement, and a teamPath ready to pass to the other team tools, so this is the way to discover teams rather than look one up. Results are paginated 25 at a time. Omitting season uses the current one, which is empty before that sport is under way. Read-only.
Inputs: sport (required), state, season, pageNumber.
maxpreps_get_rosterGet a MaxPreps team rosterARead-onlyIdempotent
Players on a team for one season: jersey, name, class year, positions, height and weight. Soft-deleted entries (duplicates and departed players the site hides) are excluded by default — a roster payload often carries substantially more rows than the page shows. Height and weight are null when the school did not publish them. Read-only.
Inputs: team (required), season, position, includeDeleted.
maxpreps_get_scheduleGet a MaxPreps team schedule and scoresARead-onlyIdempotent
Every game for a team season, with the result and both scores. Scores are oriented team-vs-opponent (teamScore/opponentScore); the raw resultString MaxPreps renders is winner-first, so a loss reads "L 20-13" even when the team scored 13. Soft-deleted contests are hidden by default, matching the site. Before opening day a current season legitimately has no results — check a prior season. Also returns any playoff or championship tournaments the season fed into. Read-only.
Inputs: team (required), played, season, includeDeleted, +1 more.
maxpreps_get_schoolGet a MaxPreps school profileARead-onlyIdempotent
School profile: identifiers, location, state athletic association, partner flags, plus nearby schools and recent articles/videos. Take the path from maxpreps_search. Read-only.
Inputs: school (required), includeNearby.
maxpreps_get_standingsGet conference standingsARead-onlyIdempotent
The standings table a team sits in — every team in the conference with its conference and overall records and placement, not just this team's own line (maxpreps_get_team gives that). Also returns the ranked statistical leaders MaxPreps highlights for the season. Read-only.
Inputs: team (required), season.
maxpreps_get_stat_leaderboardGet a MaxPreps stat leaderboardARead-onlyIdempotent
The ranked athletes for one statistical category across a state or nationally — up to 200 per board, each with their full stat line, school, and a teamPath for the other team tools. Take path from maxpreps_list_stat_categories rather than constructing it. If MaxPreps changes the row shape the rows are returned undecoded with a warning rather than mislabelled. Read-only.
Inputs: path (required), limit.
maxpreps_get_stat_leadersGet MaxPreps team stat leadersARead-onlyIdempotent
Statistical leaders for a team season — each entry names the athlete, the stat, its value and the athlete's career URL. Also returns the qualifying minimums and the stat refresh time. Coverage varies by sport and by how diligently the school reports; an empty result is normal, not an error. Read-only.
Inputs: team (required), season.
maxpreps_get_teamGet a MaxPreps team seasonARead-onlyIdempotent
Team overview for one season: sport/level/season identifiers, the win-loss record and points for/against, conference standing, rankings, and the full list of seasons this team has on MaxPreps (roughly 20 years). Use it to confirm a record without summing a schedule. Read-only.
Inputs: team (required), season, includeSeasons.
maxpreps_get_team_rankingsGet one team’s rankingsARead-onlyIdempotent
Where a single team sits in each ranking MaxPreps publishes for it — typically national, state, state division/class, and metro area — along with the teams ranked immediately around it. Use this for "how good is this team"; use maxpreps_get_rankings to browse a whole leaderboard. Read-only.
Inputs: team (required), season.
maxpreps_healthcheckCheck MaxPreps connectivityARead-only
Verify MaxPreps is reachable and that the site build id — which every data route embeds and which changes on each deploy — resolves. Also probes a real data route, so a pass means tools will work. Reports a failure rather than throwing. No credentials are required by this server. Read-only.
Inputs: no named parameters.
maxpreps_list_stat_categoriesList MaxPreps stat leaderboard categoriesARead-onlyIdempotent
Which statistical leaderboards exist for a sport, with the path to each one plus the national and in-scope averages and the games-played minimum. Call this before maxpreps_get_stat_leaderboard — the leaf path is not derivable from the stat name (Total TDs lives at touchdowns/tot-tds, Sacks at sacks/tot-sacks), so the path must come from here. Read-only.
Inputs: sport (required), state, season.
maxpreps_list_teamsList a school’s teamsARead-onlyIdempotent
Every team path a school publishes, with sport, gender and level. Call this before any team tool — the sport path segments are not guessable (the default gender varies by sport, so girls golf is "golf/girls" while boys golf is "golf/spring", and field hockey has no gender segment at all). Passing a team path instead of a school path returns that team’s seasons. Read-only.
Inputs: school (required), level, sport.
maxpreps_searchSearch MaxPreps schools and athletesARead-onlyIdempotent
Find a high school or an athlete by name. This is the entry point for every other tool: it returns each school's canonicalUrl (the site path the team tools need) and each athlete's careerCanonicalUrl. Search is exact-ish — prefer the plain school name ("myers park"), because appending qualifiers like "high" or "high school" usually returns nothing. Read-only.
Inputs: query (required), limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 15 tools
Each tool targets a distinct resource or level of granularity: school, team, schedule, roster, athlete, standings, rankings, and stat leaderboards. Near neighbors are explicitly differentiated in the descriptions, such as get_standings vs get_team, get_rankings vs get_team_rankings, and get_stat_leaders vs get_stat_leaderboard. No two tools require semantic guessing.
The maxpreps_ prefix with a get_ or list_ verb is applied consistently across almost all tools, making the pattern predictable. Minor deviations are maxpreps_search and maxpreps_healthcheck, which do not follow the verb_noun shape, and the subtle singular/plural pair stat_leaders vs stat_leaderboard.
Fifteen tools is at the high end of the ideal range, but each one maps to a distinct data surface, including an operational healthcheck and an explicit escape hatch. The granularity is justified by MaxPreps' broad read-only domain rather than bloat.
The set covers core MaxPreps workflows: search, school profile, team discovery, schedule, roster, standings, stats, rankings, and athlete career pages. Minor gaps like playoff brackets, arbitrary conference standings, and article listings are left to the raw get_page escape hatch, so agents can work around them.
Maintenance
Related MCP Connectors
ESPN MCP — keyless multi-sport live scores, teams, and news via ESPN's public site API.
SportsDataIO MCP — wraps SportsDataIO's Big-Six sports data API (sportsdata.io)
MLB Stats API MCP — official MLB statistics (keyless).
One MCP server for 180+ live web-data APIs returning clean JSON from sites that block scrapers.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP Server that enables interaction with MLB scores and statistics via the SportsData.io MLB V3 Scores API, allowing users to access baseball data through natural language queries.-
- FlicenseNot gradedqualityDmaintenanceAn MCP server for accessing college basketball statistics through the SportsData.io CBB v3 Stats API, enabling AI agents to retrieve and analyze college basketball data through natural language interactions.-
- AlicenseAqualityCmaintenanceMCP server for NBA live data and stats, providing read-only tools to query live scores, box scores, player info, standings, and more from NBA.com.1511 npm1MIT
- FlicenseNot gradedqualityDmaintenanceMCP server providing tools to query live scores, schedules, standings, and game stats from the SportRadar API for multiple sports including NFL, NBA, NHL, NCAAMB, soccer, and tennis.-