maxpreps-mcp
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-mcpGet 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 |
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.
| Name | Required | Description | Default |
|---|---|---|---|
| athlete | Yes | Athlete career path or URL, including ?careerid=… (use search’s careerCanonicalUrl) | |
| careerId | No | careerid, if not already present in the path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description confirms 'Read-only' without contradiction. It adds valuable context that the careerCanonicalUrl carries the required careerid parameter and that without it the page cannot be addressed, disclosing an input prerequisite not fully captured by the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. It front-loads the purpose and then provides a crucial usage hint about sourcing the URL from search. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two well-documented parameters and no output schema, the description covers the essential usage: what it returns (season history, sports played, available data), how to obtain the required input, and its read-only nature. It could mention error cases if careerid is missing, but that is already implied by the warning. Overall, an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both athlete and careerId parameters have detailed descriptions including the requirement for careerid in the path. The tool description restates this but does not add new semantic meaning beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a single athlete's career page with season history, sports played, and available data. The verb 'get' and resource 'athlete career' are specific, and the focus on one athlete distinguishes it from sibling tools like maxpreps_get_school or maxpreps_get_team, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to pass the careerCanonicalUrl from maxpreps_search verbatim, establishing a clear dependency and workflow. It implies this is the follow-up to a search, though it does not explicitly state when not to use this tool or name alternatives. The context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Site path or maxpreps.com URL | |
| keysOnly | No | Return only the top-level prop names and their types — cheap way to explore a page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds genuinely useful behavioral context beyond those annotations: the data arrives 'undecoded' and, critically, that positional payloads (rosters/schedules) come back 'as bare arrays here with no field names' — a real surprise an agent would otherwise hit at runtime. Minor omissions like failure behavior for invalid/non-public paths keep 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly 55 words carry the core purpose, the selection rule, the format gotcha, sibling routing, and the read-only flag. The most identifying information ('Escape hatch... undecoded') is front-loaded first, and every clause earns its place — no repetition of schema text or annotation fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description bears the burden of explaining return behavior, and it covers the two biggest hazards (undecoded raw format and nameless bare arrays) plus the safety profile via annotations. It doesn't mention error handling for invalid or non-public paths or response size/pagination, but for a read-only escape-hatch tool with openWorldHint this is a strong, adequate disclosure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies: both `path` and `keysOnly` are already documented in the schema. The description adds only the 'public page' scope constraint on `path` and the exploration framing around keysOnly, which is marginal value over the schema. It doesn't compensate further because no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb+resource: 'return the raw server-rendered data for any public MaxPreps page, undecoded.' It frames itself as an 'escape hatch' and differentiates from siblings by naming the gaps it fills (playoff brackets, conference standings, article listings) and by explicitly routing roster/schedule pages to dedicated siblings. An agent can distinguish this from the 14 sibling tools immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use when a dedicated tool does not cover what you need' is an explicit selection rule, reinforced with concrete examples and a direct exclusion: 'use maxpreps_get_roster / maxpreps_get_schedule for those.' This tells the agent when to pick the tool and which alternatives to choose instead, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport slug as used in MaxPreps URLs, e.g. football, basketball | |
| state | No | Two-letter state code, e.g. NC. Omit for national rankings. | |
| season | No | Season label, e.g. 25-26. Omit for the current season. | |
| pageNumber | No | 1-based page; 25 teams per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds behavioral context beyond these: it mentions pagination (25 per page), the season behavior (current season may be empty for future sports), and that the tool is for discovery (returns teamPath for use in other tools). These are valuable details not captured by the annotations, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, three sentences, and front-loaded with the key purpose. It avoids fluff, and each sentence adds a distinct piece of value: what the tool returns, how it's used for discovery, and behavioral caveats. It's well-structured, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, 1 required, no output schema), the description is quite complete. It covers pagination, season edge case, and the integration with other tools. The only minor gap is not explicitly stating that the output is purely for display purposes or that the teamPath can be used with specific sibling tools, but these are implied. The description provides sufficient context for an agent to call the tool correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – every parameter (sport, state, season, pageNumber) has a description in the schema itself. The description reinforces the purpose of state (omit for national), season (omit for current), and pageNumber (25 per page), but doesn't add new semantic detail beyond what's in the schema. Baseline 3 is appropriate since the schema already handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns a ranked leaderboard of teams for a sport, either nationally or within a state. It specifies the exact resource (team rankings), the verb (get/list), and the scope (national or state). It also differentiates from siblings by noting it's the way to discover teams rather than look one up, and mentions the teamPath field that connects to other team tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool (to discover teams) and mentions that omitting season gives the current season, which may be empty before the sport is underway. It doesn't explicitly name alternatives, but it contrasts with 'look one up' (implying search), and notes this is the discovery path. It could be improved by explicitly naming the sibling alternatives like maxpreps_search or maxpreps_list_teams, but the guidance is generally clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| season | No | Season label, e.g. 25-26. Omit for the current season. | |
| position | No | Case-insensitive filter on position, e.g. "QB" | |
| includeDeleted | No | Include soft-deleted roster entries the site hides |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly, openWorld, and idempotent hints, and the description adds meaningful behavior beyond those: soft-deleted entries are excluded by default, the payload may contain substantially more rows than the page displays, and height/weight are null when not published. This gives the agent useful expectations about data completeness and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, leading with the core purpose before adding necessary caveats. Each sentence provides distinct value: scope, soft-deletion behavior, null-handling, and read-only status, with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description discloses the returned fields, null behavior, and the soft-deleted row discrepancy, which is enough for a caller to interpret results. It does not specify the response shape (e.g., array vs object), but for a roster listing that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents team, season, position, and includeDeleted with examples and defaults. The description's mention of soft-deleted exclusion aligns with includeDeleted's default but adds no new paramter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as retrieving players on a team for one season and enumerates the returned fields (jersey, name, class year, positions, height, weight). It does not explicitly distinguish itself from sibling tools like get_team or get_athlete, but the roster scope is evident and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of alternatives such as maxpreps_get_team or maxpreps_get_athlete. The read-only note is a property, not usage direction. Implicitly, it is the roster-specific tool, but that is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| played | No | Filter to games with a result, games without one, or both | all |
| season | No | Season label, e.g. 25-26. Omit for the current season. | |
| includeDeleted | No | Include soft-deleted contests the site hides | |
| includeTournaments | No | Include playoff/championship tournament entries the schedule references |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the annotations: score orientation (team-vs-opponent), the winner-first rendering of `resultString`, the default hiding of soft-deleted contests, the season-caveat for opening day, and the inclusion of playoff tournaments. These details directly affect interpretation of the return data and are not provided by the annotations, which only declare read-only/idempotent/open-world hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact paragraph that front-loads the core purpose in the first sentence, then packs important caveats and behavioral notes efficiently. While it is slightly dense, every sentence adds value and there is no fluff or repetition, earning a strong score without being minimalist.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no output schema), the description covers the key gotchas an agent needs: score orientation, result-string ambiguity, deleted-contest defaults, season timing, and tournament inclusion. It does not explicitly describe the `played` filter behavior beyond the schema, and error cases are not mentioned, but overall the description is sufficiently complete for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented with types, defaults, and descriptions. The description mentions 'soft-deleted contests are hidden by default' and 'also returns any playoff or championship tournaments,' but these merely restate the existing defaults of `includeDeleted` and `includeTournaments`. It does not add new meaning or syntax for parameters beyond what the schema already provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Every game for a team season, with the result and both scores,' which names a specific verb and resource and clearly differentiates it from sibling tools like maxpreps_get_team or maxpreps_get_standings. It further specifies the scope (team season) and the inclusion of tournament entries, leaving no ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a useful context cue ('Before opening day a current season legitimately has no results — check a prior season') but does not explicitly state when to use this tool versus alternatives or name any sibling tool. The usage context is implied by the tool name and description rather than stated as a decision rule, so it stays at a mid-range score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| school | Yes | School site path or maxpreps.com URL, e.g. nc/charlotte/myers-park-mustangs | |
| includeNearby | No | Include the nearby-schools list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already provide readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the content inventory and path provenance, but no additional behavioral details such as error handling, rate limits, or the conditional nature of includeNearby.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the profile summary and followed by the essential usage instruction. Every word earns its place with no redundancy beyond the harmless 'Read-only' echo of the annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the expected profile contents and identifying the required input source. The only small gap is that 'nearby schools' is described as part of the profile while the includeNearby parameter governs whether it appears, but the schema resolves this ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameters are already documented; the description adds value by telling the agent where to obtain the school path ('Take the path from maxpreps_search'). It does not connect includeNearby to the 'nearby schools' mention, but the schema handles that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as a school profile and enumerates its contents (identifiers, location, state athletic association, partner flags, nearby schools, articles/videos). This distinguishes it from team-level siblings, though it does not explicitly contrast with maxpreps_get_team or similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Take the path from maxpreps_search' provides a direct usage instruction: obtain the required school path from a prior search. This establishes a clear workflow without explicitly naming alternative tools or exclusions, so it is strong but not maximal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| season | No | Season label, e.g. 25-26. Omit for the current season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description adds useful context about the scope and content of the response: every conference team, records, placement, and highlighted statistical leaders. It does not discuss failure modes or authentication, but these are not significant concerns for a read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it leads with the core output, clarifies scope with a sibling contrast, and adds the secondary stat-leaders behavior. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work of explaining return content: full standings, records, placement, and stat leaders. The schema covers parameter details, and annotations cover safety, so the description is complete enough for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters (team, season) are fully documented with formats and examples. The description adds no new parameter-level detail beyond referring to 'a team,' so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool returns: the full conference standings table for a team's conference, including records and placement, plus the statistical leaders MaxPreps highlights. It also distinguishes itself from maxpreps_get_team, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool versus maxpreps_get_team: use it for the whole standings table, not just the team's own line. This is a clear routing instruction to the most relevant sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Leaderboard path from maxpreps_list_stat_categories, e.g. nc/football/25-26/stat-leaders/offense/passing/yds | |
| limit | No | Max athletes to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/idempotentHint annotations, the description adds valuable behavioral context: rows are returned undecoded with a warning if MaxPreps changes their shape, and it explicitly states the tool is read-only. This helps the agent anticipate external schema drift without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the definition and output contents, then give sourcing guidance and a failure-mode warning. Every sentence earns its place; the only slight redundancy is the final 'Read-only', which is brief and harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only, two-parameter tool with no output schema, the description is complete: it explains what is returned, how to obtain the required path, the limit behavior, and the fallback behavior if the upstream format changes. No critical calling information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters well, including the path format/example and the limit bounds/default, so schema description coverage is 100%. The description mostly restates the sourcing guidance for `path` and the 200-athlete cap, adding no meaningfully new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource: ranked athletes for one statistical category, scoped to a state or nationally, and specifies output contents (stat line, school, teamPath). It does not explicitly contrast itself with similar sibling tools like maxpreps_get_stat_leaders or maxpreps_get_rankings, so it misses the strongest sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives actionable guidance — take `path` from maxpreps_list_stat_categories rather than constructing it — and implies the tool is used after listing categories. It does not state when to prefer this tool over alternatives or when not to use it, leaving selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| season | No | Season label, e.g. 25-26. Omit for the current season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: coverage varies by sport and school effort, and an empty result is expected rather than an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences convey the result contents, the extra returns, the natural variability, and the empty-result semantics. There is no filler or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains what the tool returns: athlete, stat, value, career URL, qualifying minimums, and refresh time. Combined with schema-covered parameters and read-only annotations, nothing critical is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'team' and 'season' documented including examples and format rules. The description does not add parameter-level detail beyond the schema, which is acceptable at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource: statistical leaders for a team season, and details what each entry contains. It does not explicitly name or distinguish itself from the similarly named sibling maxpreps_get_stat_leaderboard, but 'team season' clarifies the scope enough to separate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it ('for a team season') and gives useful context that empty results are normal. It does not explicitly say when to prefer this tool over maxpreps_get_stat_leaderboard or maxpreps_list_stat_categories, so guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| season | No | Season label, e.g. 25-26. Omit for the current season. | |
| includeSeasons | No | Include the list of available seasons |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint, openWorldHint, and idempotentHint annotations already cover the safety profile, and the description repeats 'Read-only' without adding new behavioral details. It does add useful scope context—one season and roughly 20 years of seasons—but no auth, rate-limit, or failure-mode disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core output content and a clear use case. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing the key returned fields: identifiers, record, points, standing, rankings, and season list. Combined with the complete input schema and clear read-only annotations, an agent has enough to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains team, season, and includeSeasons. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact verb and resource: a team season overview, including identifiers, record, points for/against, standing, rankings, and the full season list. This clearly differentiates it from siblings like maxpreps_get_schedule, maxpreps_get_standings, and maxpreps_get_rankings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete intended use: confirm a record without summing a schedule, which routes agents away from maxpreps_get_schedule. It does not explicitly enumerate when to prefer it over roster, rankings, or other sibling tools, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes | Team site path or URL, e.g. nc/charlotte/myers-park-mustangs/football | |
| season | No | Season label, e.g. 25-26. Omit for the current season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, and idempotent, and the description's 'Read-only' aligns with them. It adds useful behavioral detail beyond annotations by specifying that the result includes surrounding ranked teams and typically covers national, state, division/class, and metro rankings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core behavior is front-loaded, and the routing guidance and read-only note are compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains what to expect: individual team rankings across relevant polls and nearby teams in each. It also covers typical ranking categories and gives usage routing. Minor gaps like response formatting or empty-ranking behavior are not critical for invoking this read-only query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters fully (team path/URL and season pattern/omission), so the description does not need to add much. It adds no extra parameter-level detail, but the high schema coverage keeps this at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a single team's position in each MaxPreps ranking plus neighboring teams. It names the specific resource and distinguishes itself from maxpreps_get_rankings, so an agent can immediately tell the two apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs use for 'how good is this team' and identifies maxpreps_get_rankings as the alternative for browsing a whole leaderboard. This provides concrete when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds useful behavior beyond that: no credentials required, reports failure rather than throwing, and probes a real data route so a pass indicates tool functionality. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler: the core purpose and pass/fail meaning come first, followed by behavioral caveats. The final 'Read-only' is slightly redundant with the annotation but harmless and brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter healthcheck, the description covers purpose, prerequisite context, failure behavior, and what a pass means for the other tools. The main gap is that it does not spell out the exact return payload, but no output schema exists and pass/fail semantics are reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so there are no parameter semantics to cover. The description still adds useful context by stating that no credentials are required by the server, which is relevant for invocation. This matches the baseline-4 expectation for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it verifies MaxPreps reachability and that the site build id resolves, then probes a real data route. This clearly distinguishes it from the sibling data-fetching tools, which all retrieve content rather than check connectivity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: as a preflight check before relying on data routes, since 'a pass means tools will work.' It does not explicitly state 'use when data tools fail' or name alternatives, but the healthcheck role is obvious against the sibling data tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sport | Yes | Sport slug as used in MaxPreps URLs, e.g. football | |
| state | No | Two-letter state code, e.g. NC. Omit for national leaders. | |
| season | No | Season label, e.g. 25-26. Omit for the current season. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, and the description confirms 'Read-only' without contradicting them. It adds useful behavioral context beyond annotations: the tool is a required prerequisite and the source of non-derivable paths, which is meaningful sequencing information for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one sentence enumerates the outputs, and a second bolded sentence gives the call-order instruction with concrete path examples. Every clause contributes information, and the most important usage note is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining what the tool returns, and it does cover the key elements: available categories, paths, averages, and games-played minimum. Optional state/season semantics are only implied through 'national and in-scope averages,' but the schema already documents those fields, so no critical gap exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter already described (sport slug, state code, season label), so the baseline is 3. The description adds marginal clarity by distinguishing 'national' vs 'in-scope' averages, which maps to omitting or providing the state parameter, but it does not materially extend the schema's parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and a specific resource ('stat leaderboard categories') and states the concrete outputs: paths, national and in-scope averages, and games-played minimum. It also differentiates from the sibling maxpreps_get_stat_leaderboard by framing this as the category/path catalog rather than the leaderboard values themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to call this before maxpreps_get_stat_leaderboard and explains why: the leaf path is not derivable from the stat name, with concrete examples. This is direct routing guidance to the relevant sibling tool, leaving no ambiguity about when this tool should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Filter on level, e.g. "Varsity", "JV", "Freshman" | |
| sport | No | Case-insensitive filter on the sport name, e.g. "football" | |
| school | Yes | School site path or maxpreps.com URL, e.g. nc/charlotte/myers-park-mustangs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, and the description adds substantial behavioral context beyond them: the output content, the non-obvious gender-dependent path encoding, and the overload where a team path returns seasons. The field hockey and golf examples reveal quirks an agent could not infer from the schema or annotations. This is exactly the kind of context that prevents incorrect calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core result, then rationale, then the overload caveat. There is no filler; every sentence earns its place. 'Read-only' repeats an annotation but is harmless and brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description states what is returned (team path, sport, gender, level) and why this call is a prerequisite to other team tools. It accounts for the main hidden complexity, unguessable path segments, and the team-path input variant. Given the rich parameter schema and safety annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 raises this by extending the 'school' parameter to also accept a team path with different return semantics. It also contextualizes path segments with examples like 'golf/girls' versus 'golf/spring'. It does not add much to the 'level' or 'sport' filters, but the added parameter flexibility is important.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states an explicit verb and resource: 'Every team path a school publishes', and identifies the returning fields (sport, gender, level). This clearly differentiates it from sibling tools like maxpreps_get_team and maxpreps_get_schedule. An agent immediately knows this is a listing/prerequisite tool, not a detail-fetching tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs 'Call this before any team tool' and explains why: sport path segments are not guessable, with concrete examples. It does not name a specific alternative tool or state when not to use it, but the prerequisite directive gives strong guidance. The sentence about passing a team path also clarifies an alternate call pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per category | |
| query | Yes | School or athlete name, e.g. "myers park" or "brody keefe" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld hints. The description adds meaningful behavioral context beyond those: search is 'exact-ish,' appending qualifiers tends to fail, and the returned values are canonicalUrl and careerCanonicalUrl. It does not describe pagination or result shape, but with the annotation safety profile covered, this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, starts with the core purpose, then gives the most important returned fields, then the exact-search caveat, then the read-only reassurance. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description rightly covers the key return values (school canonicalUrl and athlete careerCanonicalUrl). It also explains the tool's role relative to the sibling getter tools. Minor omissions like result-category structure are not critical for a search entry point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds value beyond the schema by explaining the query semantics: use the plain school or athlete name, avoid suffix qualifiers, and note that results route to team and athlete tools via canonical URLs. This meaningfully clarifies how to use the query parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Find a high school or an athlete by name.' It further distinguishes itself from the getter siblings by calling itself 'the entry point for every other tool' and specifying the canonical URLs it returns, which is exactly what downstream team and athlete tools need.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames when to use this tool ('entry point for every other tool') and provides concrete search guidance: prefer the plain school name because appending qualifiers like 'high' or 'high school' 'usually returns nothing.' This gives an agent actionable selection and invocation direction.
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.
15 tool updates
v1.0.0- Changed
maxpreps_get_athlete1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_page1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_rankings1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_roster1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_schedule1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_school1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_standings1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_stat_leaderboard1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_stat_leaders1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_team1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_get_team_rankings1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_healthcheck1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_list_stat_categories1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_list_teams1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
maxpreps_search1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
15 tool updates
v0.2.0- First observed
maxpreps_get_athlete - First observed
maxpreps_get_page - First observed
maxpreps_get_rankings - First observed
maxpreps_get_roster - First observed
maxpreps_get_schedule - First observed
maxpreps_get_school - First observed
maxpreps_get_standings - First observed
maxpreps_get_stat_leaderboard - First observed
maxpreps_get_stat_leaders - First observed
maxpreps_get_team - First observed
maxpreps_get_team_rankings - First observed
maxpreps_healthcheck - First observed
maxpreps_list_stat_categories - First observed
maxpreps_list_teams - First observed
maxpreps_search
TDQS
Scored across 15 tools
Each tool targets a clearly distinct resource or perspective—school, team, schedule, roster, athlete, rankings, standings, and stat leaderboards are all explicitly differentiated. The descriptions carefully preempt confusion, e.g., get_rankings (browse leaderboard) vs get_team_rankings (single team's positions), and stat_leaders vs stat_leaderboard.
All tools follow a predictable maxpreps_<verb>_<noun> pattern in snake_case. get_ dominates for resource retrieval, list_ is used for enumerations, and search/healthcheck are the only clear exceptions, which still fit the verb-first style.
15 tools sits at the top of the well-scoped range but is justified by the breadth of the domain: discovery, school profiles, teams, season data, rosters, stats, rankings, and athletic careers. The auxiliary healthcheck and get_page tools add operational value without feeling like padding.
The surface covers the full read-only lifecycle: search, school, teams, team overview, schedule, roster, stat leaders, athlete pages, rankings, standings, and stat leaderboards. The get_page escape hatch covers residual gaps like playoff brackets and articles, leaving no dead ends for agents.
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.158 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.-