{
  "markdown": "# maxpreps-mcp\n\nMCP server for [MaxPreps](https://www.maxpreps.com) — read any US high school's\nteam schedules, scores, records, rosters, stat leaders and athlete careers.\n\n> Developed and maintained by AI (Claude Code). Use at your own discretion.\n\n**No account, no API key, no browser extension.** MaxPreps serves its pages with\nNext.js, and every public page has a companion JSON route carrying the same data\nthe page was rendered from. This server reads those routes directly over plain\nHTTPS, so it works anywhere Node runs.\n\n## Install\n\n```bash\nnpx maxpreps-mcp\n```\n\nOr add it to an MCP host:\n\n```json\n{\n  \"mcpServers\": {\n    \"maxpreps\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"maxpreps-mcp\"]\n    }\n  }\n}\n```\n\n## Tools\n\nAll fifteen are read-only; this server has no write path.\n\n| Tool | What it does |\n| --- | --- |\n| `maxpreps_search` | Find a school or athlete by name — **start here** |\n| `maxpreps_list_teams` | Every team path a school publishes, with sport/gender/level |\n| `maxpreps_get_school` | School profile, identifiers, association, nearby schools |\n| `maxpreps_get_team` | Season record, standings, rankings, and available seasons |\n| `maxpreps_get_schedule` | Games with results and scores, plus a computed record |\n| `maxpreps_get_roster` | Players with jersey, class, positions, height, weight |\n| `maxpreps_get_stat_leaders` | Statistical leaders with qualifying minimums |\n| `maxpreps_get_rankings` | Ranked leaderboard for a sport, national or by state |\n| `maxpreps_get_team_rankings` | Where one team ranks nationally, by state, division, metro |\n| `maxpreps_get_standings` | Conference table with every team's record |\n| `maxpreps_list_stat_categories` | Which stat leaderboards exist, and their paths |\n| `maxpreps_get_stat_leaderboard` | Ranked athletes for one stat, statewide or national |\n| `maxpreps_get_athlete` | One athlete's career page |\n| `maxpreps_healthcheck` | Connectivity plus site build-id resolution |\n| `maxpreps_get_page` | Raw page data for anything the above doesn't cover |\n\n### Typical flow\n\nPaths are not guessable, so resolve before you fetch:\n\n1. `maxpreps_search \"myers park\"` → the school's `canonicalUrl`\n2. `maxpreps_list_teams` on that path → real team paths\n3. `maxpreps_get_schedule` / `_roster` / `_stat_leaders` / `_standings` on a team path\n\nTo go the other way — discovering teams and athletes rather than looking one up —\n`maxpreps_get_rankings` and `maxpreps_get_stat_leaderboard` return ranked lists whose entries\neach carry a `teamPath` you can feed straight back in. Stat leaderboard paths are not\nguessable either, so list the categories first.\n\nPrior seasons are a `season` argument (`\"25-26\"`); roughly 20 years are available.\n\n## Configuration\n\nEverything is optional — the server works with no configuration at all.\n\n| Variable | Default | Purpose |\n| --- | --- | --- |\n| `MAXPREPS_USER_AGENT` | built-in | Override the User-Agent sent to MaxPreps |\n| `MAXPREPS_CACHE_TTL` | `300` | Seconds to reuse a fetched page; `0` disables |\n| `MAXPREPS_MIN_INTERVAL_MS` | `250` | Minimum spacing between requests |\n| `MAXPREPS_TIMEOUT_MS` | `20000` | Per-request timeout |\n\n## Things worth knowing\n\nThese are properties of MaxPreps' data, and each one has bitten a naive reading:\n\n- **Scores are winner-first in the raw data.** MaxPreps renders a loss as\n  `\"L 20-13\"` even when the team scored 13. The `teamScore` / `opponentScore`\n  fields this server returns are always oriented team-vs-opponent.\n- **Rosters and schedules carry hidden rows.** A meaningful minority are flagged\n  deleted and the site does not render them — the 2025-26 Myers Park football\n  roster has 87 entries behind 63 visible players. They are excluded by default.\n- **An out-of-season team is not a broken one.** Before opening day the current\n  season legitimately has an empty roster and no results; ask for a prior season.\n- **Search is literal.** `\"myers park\"` finds the school; `\"myers park high\"`\n  finds nothing. Drop qualifiers before concluding a school is absent.\n- **Statewide scoreboards aren't available.** `/<st>/<sport>/scores/` renders its\n  game list client-side from a route that has no server-rendered payload. Per-team\n  schedules are the supported way to get scores; `maxpreps_get_rankings` is the way\n  to see a whole state's teams at once.\n\n## Shell-only alternative\n\nThe repo also ships a `maxpreps` skill (`skills/maxpreps/`) that reaches the same\ndata through `curl` + a small decoder, with no server to run. If you only ever use\nClaude Code on one machine, the skill alone may be all you need; the MCP server is\nwhat makes this reachable from claude.ai, a phone, or any other client.\n\n## Development\n\n```bash\nnpm install\nnpm run build\nnpm test\n```\n\n`docs/MAXPREPS-API.md` pins the captured request/response shapes, the positional\nkey maps, and how to re-derive them if MaxPreps changes its bundle.\n\n## Etiquette\n\nThis reads an undocumented surface on someone else's site on behalf of one user.\nRequests are spaced and responses cached by default. Please keep it that way.\n\n## License\n\nMIT\n",
  "bytes": 5070,
  "sha": "7b4a0d46bb4297e2f2e54a21ffa3ba8eafdb1bbd9efe4ad6ebb6b6019f98a587",
  "repo_slug": "chrischall/maxpreps-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chrischall_maxpreps_mcp_7ea9cea5/readme"
}