# Statbotics (npm · @withinfocus/statbotics-mcp-server)

Statbotics MCP Server

- Trust score: 76/100 (medium)
- Change this week: +34
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@withinfocus/statbotics-mcp-server`: 76/100 (this document), [markdown](https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server.md), [page](https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@withinfocus/statbotics-mcp-server`
- Version: `1.1.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects @hono/node-server 1.19.17, reached via @modelcontextprotocol/sdk > @hono/node-server. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (138 of 142), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to withinfocus/statbotics-mcp-server).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 96 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3861 tokens (~275/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add withinfocus-statbotics -- npx -y @withinfocus/statbotics-mcp-server
```

### Codex

```bash
codex mcp add withinfocus-statbotics -- npx -y @withinfocus/statbotics-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "withinfocus-statbotics": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@withinfocus/statbotics-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add withinfocus-statbotics --command npx --arg -y --arg @withinfocus/statbotics-mcp-server
```

### Hermes

```yaml
mcp_servers:
  withinfocus-statbotics:
    command: "npx"
    args: ["-y", "@withinfocus/statbotics-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "withinfocus-statbotics": {
      "command": "npx",
      "args": [
        "-y",
        "@withinfocus/statbotics-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 75, +58)

- [security regression] GHSA-frvp-7c67-39w9 affects this package: medium
- [security regression] Known CVEs: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] The attested source repository moved: withinfocus/statbotics-mcp-server
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.20
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 17, −25)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 42, +18)

- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 24, −18)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 42)

First indexed and scored.

## MCP tools (14)

### `get_year` (~196 tokens)

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.

Input parameters:

- `year` (integer, required): Four-digit year (2002 onwards)

### `get_years` (~236 tokens)

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`.

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.

### `get_team` (~186 tokens)

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.

Input parameters:

- `team` (integer, required): Team number (no prefix), e.g. 86

### `get_teams` (~393 tokens)

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".

Input parameters:

- `active` (boolean): Whether the team has played in the last year.
- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `country` (string): Capitalized country name, e.g. USA or Canada.
- `district` (string): District abbreviation. One of: ca, fch, fim, fin, fit, fma, fnc, fsc, isr, ne, ont, pch, pnw, win.
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `state` (string): Capitalized two-letter state code, e.g. NC.

### `get_team_year` (~190 tokens)

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.

Input parameters:

- `team` (integer, required): Team number (no prefix), e.g. 86
- `year` (integer, required): Four-digit year (2002 onwards)

### `get_team_years` (~363 tokens)

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".

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `country` (string): Capitalized country name, e.g. USA or Canada.
- `district` (string): District abbreviation. One of: ca, fch, fim, fin, fit, fma, fnc, fsc, isr, ne, ont, pch, pnw, win.
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `state` (string): Capitalized two-letter state code, e.g. NC.
- `team` (integer): Team number (no prefix), e.g. 86
- `year` (integer): Four-digit year (2002 onwards)

### `get_event` (~208 tokens)

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.

Input parameters:

- `event` (string, required): Event key, e.g. 2024flor

### `get_events` (~410 tokens)

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.

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `country` (string): Capitalized country name, e.g. USA or Canada.
- `district` (string): District abbreviation. One of: ca, fch, fim, fin, fit, fma, fnc, fsc, isr, ne, ont, pch, pnw, win.
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `state` (string): Capitalized two-letter state code, e.g. NC.
- `type` (string): One of: regional, district, district_cmp, champs_div, einstein, or offseason.
- `week` (integer): Week of the competition season. 8 is CMP.
- `year` (integer): Four-digit year (2002 onwards)

### `get_team_event` (~181 tokens)

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.

Input parameters:

- `event` (string, required): Event key, e.g. 2024flor
- `team` (integer, required): Team number (no prefix), e.g. 86

### `get_team_events` (~434 tokens)

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 - great for getting an event's full team list with stats), `country`, `state`, `district`, `type` (regional, district, district_cmp, champs_div, einstein, offseason), and `week` (0-8). Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to answer "show every event team 254 has attended in 2024", "list all teams at 2024flor with their ranks", or "rank teams by EPA across all 2024 district championships".

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `country` (string): Capitalized country name, e.g. USA or Canada.
- `district` (string): District abbreviation. One of: ca, fch, fim, fin, fit, fma, fnc, fsc, isr, ne, ont, pch, pnw, win.
- `event` (string): Event key, e.g. 2024flor
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `state` (string): Capitalized two-letter state code, e.g. NC.
- `team` (integer): Team number (no prefix), e.g. 86
- `type` (string): One of: regional, district, district_cmp, champs_div, einstein, or offseason.
- `week` (integer): Week of the competition season. 8 is CMP.
- `year` (integer): Four-digit year (2002 onwards)

### `get_match` (~214 tokens)

Look up a single FIRST Robotics Competition (FRC) match by its match key. Returns full match detail: red and blue alliance team lists, final scores by alliance and component (auto, teleop, endgame, fouls), ranking points awarded, win/tie outcome, the Statbotics pre-match win probability and predicted score, and elimination flag. Match keys follow the format `<event-key>_<match-code>`, e.g. "2024flor_qm20" (qualification match 20), "2024flor_sf2m1" (semifinal 2 match 1), "2024flor_f1m3" (finals match 3). Use this to answer "who won 2024flor_qm20?", "what was the predicted vs actual score?", or to get alliance compositions for a known match. For browsing many matches, use get_matches.

Input parameters:

- `match` (string, required): Match key, e.g. 2024flor_qm20

### `get_matches` (~334 tokens)

List FIRST Robotics Competition (FRC) matches with optional filters. Returns an array of match records (alliances, scores, predictions, EPA-based win probabilities, elim flag). Filter by `team` (every match a team played in), `year`, `event` (every match at one event), `week` (0-8), and `elim` (true for playoff/elimination matches only, false for qualifications only). Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to answer "show all of team 254's matches in 2024", "list every elim match at 2024cmptx", or "find the highest-scoring matches of week 6". For per-team match contributions (a team's individual EPA in a match), use get_team_matches.

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `elim` (boolean): Whether the match is an elimination match.
- `event` (string): Event key, e.g. 2024flor
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `team` (integer): Team number (no prefix), e.g. 86
- `week` (integer): Week of the competition season. 8 is CMP.
- `year` (integer): Four-digit year (2002 onwards)

### `get_team_match` (~179 tokens)

Get a single team's contribution to a single FIRST Robotics Competition (FRC) match - the per-robot view of one match. Returns which alliance the team was on (red/blue), the team's EPA going into the match, the team's predicted score contribution by component, and post-match outcome flags. Useful for scouting and post-match analysis: "how much did team 2056 contribute to alliance score in 2024onham_sf2m1?". Requires both `team` (integer, no prefix) and `match` (match key like "2024flor_qm20"). For listing many team-match rows, use get_team_matches.

Input parameters:

- `match` (string, required): Match key, e.g. 2024flor_qm20
- `team` (integer, required): Team number (no prefix), e.g. 86

### `get_team_matches` (~337 tokens)

List per-team match contributions across many FIRST Robotics Competition (FRC) matches. Each row is one team's involvement in one match (alliance, pre-match EPA, predicted contribution, outcome). Filter by `team` (one team's entire match log), `year`, `event`, `week` (0-8), `match` (a single match key - returns one row per team in that match), and `elim` (true for elimination matches only). Sort with `metric`/`ascending` and paginate with `limit`/`offset`. Use this to build a scouting timeline ("every match team 254 played in 2024 with their EPA contribution"), compare alliance partners, or compute per-team averages over a range of matches.

Input parameters:

- `ascending` (boolean): Whether to sort in ascending order. Default is ascending.
- `elim` (boolean): Whether the match is an elimination match.
- `event` (string): Event key, e.g. 2024flor
- `limit` (integer): Maximum number of results to return (1-1000). Default is 1000.
- `match` (string): Match key, e.g. 2024flor_qm20
- `metric` (string): How to sort the returned values. Any column in the table is valid.
- `offset` (integer): Offset from the first result to return.
- `team` (integer): Team number (no prefix), e.g. 86
- `week` (integer): Week of the competition season. 8 is CMP.
- `year` (integer): Four-digit year (2002 onwards)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server#diagnostics

## Score history

- 2026-08-03: 76
- 2026-08-02: 75
- 2026-08-01: 17
- 2026-07-31: 17
- 2026-07-30: 42
- 2026-07-28: 24
- 2026-07-27: 42

## Links

- npm package: https://www.npmjs.com/package/@withinfocus/statbotics-mcp-server
- Socket report: https://socket.dev/npm/package/@withinfocus/statbotics-mcp-server
- Repository: https://github.com/withinfocus/statbotics-mcp-server
- Website: https://statbotics.io/
- Changelog RSS feed: https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/withinfocus-statbotics/withinfocus-statbotics-mcp-server
