Statbotics MCP Server - provides access to FRC (FIRST Robotics Competition) statistics and analytics from the Statbotics API
Strong tool definitions with consistent naming, detailed descriptions, and complete schemas. All 14 tools follow verb_noun naming convention (get_*, list_*). Descriptions are comprehensive and LLM-optimized (range 180-620 chars, well above the 50-200 char sweet spot for brevity, but detailed enough to guide selection). All parameters have explicit type definitions and descriptions. Input schemas are properly defined via Zod with toMCPSchema conversion. Tool annotations (readOnlyHint, idempotentHint, destructiveHint, openWorldHint) are correctly applied. Only minor gaps: output schemas are not explicitly documented in code (though implied by Statbotics API); error handling guidance is minimal.
Look up a single FIRST Robotics Competition (FRC) event by its event key. Returns metadata (event name, year, week, type, location, dates, district), aggregate EPA stats for participating teams, qualification and playoff status, and Statbotics predictions for the event (e.g. winner probabilities). Event keys follow the format `<year><event-code>`, e.g. "2024flor" (FLOR = Orlando regional 2024), "2024necmp" (New England district championship 2024), "2024cmptx" (Houston champs 2024). Use this to answer "what happened at 2024flor?", "show predictions for 2024cmptx", or to get context (week, type, location) for an event you have the key for. For browsing events by season, district, or week, use get_events.
List FIRST Robotics Competition (FRC) events with optional filters - the discovery tool for finding event keys and browsing the season schedule. Returns an array of events with name, key, dates, location, week, type, EPA stats, and predictions. Filter by `year` (4-digit, >=2002), `country`, `state`, `district`, `type` (regional, district, district_cmp, champs_div, einstein, offseason), and `week` (0-8 of the season; 8 = championship). Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to answer "what regionals were in California in 2024?", "list all week 1 events this year", or "find the FRC championship divisions" (year=YEAR, type="champs_div"). If you need a single event you already know, use get_event.
Look up a single FIRST Robotics Competition (FRC) match by its match key. Returns match data: teams, scores (alliance and per-team), playoff level if applicable, time/datetime, event, year, and EPA scores (pre-match, contribution per team, and aggregate predicted for the match). Match keys follow the format `<event-key>_<match-type><number>`, e.g. "2024flor_qm42" (qualification match 42 at 2024 Orlando regional), "2024flor_sf1m1" (semifinal 1, match 1, at same event). Use this to answer "what was the score of match 2024cmptx_f1m2?", "get EPA predictions for this match", or to retrieve detailed match-level data. For browsing many matches, use get_matches.
Output schemas not explicitly documented in tool definitions. Tool descriptions describe returned data generically but do not include structured JSON schema documenting field types, required fields, or object structure.
Error handling guidance absent. Tool descriptions do not explain what errors can occur, which are retryable, or what the agent should do if a call fails (e.g., 'year out of range', 'team not found', 'invalid event key').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 51 | - | v1 |
List FIRST Robotics Competition (FRC) matches with optional filters. Returns an array of matches (teams, scores, EPA, times, types). Filter by `team` (one team across all matches), `year` (4-digit), `event` (one event's matches), `week` (0-8), and `elim` (true for playoff matches only). Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to answer "list all matches involving team 254", "show all qualification matches from 2024chmpx", or "rank all matches by EPA margin".
Look up the Statbotics profile for a single FIRST Robotics Competition (FRC) team by team number. Returns lifetime/career data for that team: team name, rookie year, location (city, state/province, country), active status, current and historical EPA ratings, normalized EPA (norm_epa), career win/loss/tie record, and career win rate. Use this to answer "tell me about FRC team 254", "where is team 2056 based?", or "what is team 1678's career EPA?". The team number is the bare integer with no FRC/frc prefix (e.g. 86, not "frc86"). For per-season detail, use get_team_year. For filtering or browsing many teams, use get_teams.
Get one team's performance at one specific FIRST Robotics Competition (FRC) event. Returns the team's qualification rank, qualification record (W-L-T), playoff alliance and result, EPA at this event (start, end, mean, breakdown by score component), and award list. Requires both `team` (integer, no prefix) and `event` (event key like "2024flor"). Use this to answer "how did team 2056 do at 2024onham?", "what was team 254's EPA at champs?", or "what awards did team 1114 win at their district championship?". For browsing many team-event combinations, use get_team_events.
List FIRST Robotics Competition (FRC) team-event records with flexible filters. Each row represents one team's performance at one event (rank, record, EPA, awards). Filter any combination of `team` (one team across all events), `year`, `event` (all teams at one event - e.g. find all team performances at 2024flor), `country`, `state`, `district`, `type`, and `week`. Sort and paginate as usual. Use this to answer "show me all of team 254's event results", "rank all teams at 2024cmptx", or "find team 2056's results in 2023".
Get one team's performance in one specific FIRST Robotics Competition (FRC) match. Returns that team's contribution to the match (EPA contribution, auto/teleop/endgame breakdown by component, team ranking in that match if applicable). Requires both `team` (integer, no prefix) and `match` (match key like "2024flor_qm20"). Use this to answer "how did team 2056 do in match 2024onham_qm5?", "what was team 254's EPA contribution at this playoff match?", or "show team 1114's score breakdown". For browsing many team-match records, use get_team_matches.
List FIRST Robotics Competition (FRC) team-match records with flexible filters. Each row represents one team's performance in one match (EPA contribution, score, result). Filter by any combination of `team` (one team's all matches), `year`, `event` (one event's all team-matches), `week`, `match` (one match's all teams), and `elim` (playoff only). Sort and paginate. Use this to answer "show team 254 in every match", "list all teams' performances at 2024cmptx", or "find team 2056's match-by-match EPA progression in 2023".
Get one team's performance summary for one specific FIRST Robotics Competition (FRC) season. Returns the team's EPA breakdown for that year (start, pre-playoffs, end, max, mean, ranks/percentiles), win/loss/tie record and win rate, count and list of events attended, district points, and award totals. Use this to answer "how did team 2056 do in 2023?", "what was team 254's peak EPA in 2018?", or "how many events did team 1114 attend in 2024?". Requires both team number (integer, no prefix) and a 4-digit year >= 2002. For multi-team or multi-year browsing, use get_team_years.
List per-season FIRST Robotics Competition (FRC) team statistics with flexible filters - useful for cross-team or cross-year analysis. Returns an array of team-year records (each row is one team's stats for one season: EPA, record, ranks, awards, district points). Filter by `team` (a single team across many seasons), `year` (all teams in one season), `country`, `state`, and `district`. Combine filters - e.g. team+year is equivalent to get_team_year. Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to answer "show team 254 in every season", "rank all teams by EPA in 2023", or "find the strongest teams in the New England district in 2024".
List FIRST Robotics Competition (FRC) teams from the Statbotics database with optional filters. Returns an array of team profiles (number, name, location, rookie year, active flag, career EPA stats, career win rate). Filter by `country` (e.g. "USA", "Canada"), `state` (two-letter code, e.g. "NC", "CA"), `district` (one of ca, fch, fim, fin, fit, fma, fnc, fsc, isr, ne, ont, pch, pnw, win), and `active` (true to limit to teams that competed in the last year). Sort with `metric`/`ascending` (e.g. metric="norm_epa", ascending=false to find the strongest active teams) and paginate with `limit`/`offset`. Use this to answer "which teams in Texas are most successful?", "list all teams in the FIM district", or "find the top 50 teams by normalized EPA".
Look up Statbotics season summary statistics for a single FIRST Robotics Competition (FRC) year. Returns aggregate metrics for the game played that year: EPA (Expected Points Added) percentile breakpoints (mean, median, 75th/90th/95th/99th), score component averages, foul rates, RP (ranking point) rates, and the count of teams, events, and matches recorded. Use this to answer questions like "what was the average score in the 2024 FRC season?", "what EPA put a team in the top 10% in 2019?", or to calibrate per-year scoring before comparing teams across seasons. Data is available for years 2002 onward; pre-2016 seasons have less detail because the EPA model was less granular. For comparing many seasons in one call, use get_years instead.
List Statbotics season summary statistics across multiple FIRST Robotics Competition (FRC) years in a single call. Returns the same per-season aggregates as get_year (EPA percentiles, scoring averages, foul/RP rates, counts) but as an array, with optional sorting and pagination. Use this to chart trends over time, e.g. "how have average match scores evolved from 2002 to today?", "which seasons had the highest top-1% EPA?", or to dump the full season catalog for downstream analysis. Sort with `metric` (any returned column name, e.g. `epa_max`, `score_mean`) and `ascending`; paginate with `limit` (1-1000, default 1000) and `offset`.
Parameter format constraints not always explicit. Parameters like 'metric' and 'district' accept arbitrary strings per schema, but descriptions list valid values (e.g., 'ca, fch, fim...'). Should use enum constraints in JSON Schema for machine-parseable validation.