

## One tool per concept. [#one-tool-per-concept]

Statshawk's MCP server exposes a small catalog by design — one tool per concept — so the
LLM picks faster and burns fewer context tokens. Cross-league concepts (standings, box
scores, rosters, player search, player props) take a `league` parameter; sport-specific
concepts get their own tool (`get_mlb_matchups` and `get_play_by_play` are MLB,
`get_country_matchup` covers FIFA World Cup and qualifying). The list below is generated
from the live server's `tools/list` at build time.

<ToolCatalog />

<Callout type="info" title="how this list is kept fresh">
  This page reads from `content/docs/mcp/tools.json`, regenerated by `scripts/fetch-mcp-tools.mjs`
  during `prebuild` and `predev`. If your local server can't reach `mcp.statshawk.ai`, the
  build keeps the previously synced copy and never blocks.
</Callout>

## Designing for small catalogs [#designing-for-small-catalogs]

| Principle             | What it means                                                                                                                                                                                                                  |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| League as a parameter | Cross-league tools take `league: "nba" \| "mlb" \| "nfl" \| "nhl" \| …` instead of shipping per-league copies. Sport-specific data (MLB matchups, Statcast play-by-play, international soccer matchups) gets a dedicated tool. |
| Pre-shaped responses  | Tools return \~1–2 KB JSON shaped for context windows. No dumps.                                                                                                                                                               |
| Verbs map to concepts | `get_box_score`, `get_player_props` — not `box.score.get.v2`.                                                                                                                                                                  |
| Stable arg names      | Once an arg ships, it doesn't get renamed. New optional args are additive.                                                                                                                                                     |

If you need a tool we don't ship, email [`tools@statshawk.ai`](mailto:tools@statshawk.ai)
with a use case and we'll evaluate whether it earns a catalog slot.
