🏏 Cricket MCP Server
[MCP]
[Go]
[License]
Cricket analytics for Claude Desktop, Claude Code, Cursor and any other MCP
client — a calibrated win-probability model, 22,479 archived matches, and
live prediction-market prices.
A Model Context Protocol server that gives
AI assistants real cricket knowledge: a calibrated win-probability model, a
ball-by-ball archive of 22,000+ matches, live prediction-market prices,
career records, and live scores.
Ask cricket questions in plain language and get answers computed from data
rather than recalled from training.
⚡ Add it in one step
It is hosted. There is nothing to install, download, build or configure.
Paste that into your client's connector settings and you are done.
No account, no API key, no data pipeline. Read-only.
Prefer to run it on your own machine? See Quick start below:
same tools, one static binary.
💬 Things to ask it
- "Who's winning the India match right now, and what does the model say?"
- "What's the score in the Minor League Cricket game, and who's favoured?"
- "Who is favoured at 149 for 7 chasing 178 with three overs left?"
- "How does Kohli bat against Bumrah in T20s?"
- "What does the market think versus your model for Welsh Fire vs Southern Brave?"
- "How does Bumrah get his wickets — bowled, caught, lbw?"
- "What's Rashid Khan's dot-ball percentage in T20s?"
- "Is Kohli better batting first or chasing?"
- "Who does Rohit Sharma score most of his runs with?"
- "Does Grand Prairie Stadium favour chasing?"
- "Show me Pooran's death-overs record."
- "What actually is a googly?"
The same win model runs in production at
cricketfornoobs.com, a live cricket explainer
for American sports fans. This server exposes the analytics side of it to any
MCP client.
✨ What makes this different
Most sports MCP servers wrap a scores API. This one ships analysis:
- Win probability from a fitted model — logistic regression per format and
innings over 10,847 matches (3.4M ball states), with pre-match Elo ratings.
Held-out log loss 0.42 (T20 chases) / 0.40 (ODI chases); ~91% accurate on
confident calls. It knows that 149/7 chasing 178 is not the same story as
149/2.
- Ball-by-ball archive — 22,479 matches and 11.4M deliveries across T20,
ODI/List-A, Tests and domestic multi-day cricket.
- Career and matchup records — batter-vs-bowler head-to-heads, phase
splits (powerplay / middle / death), venue reports, league leaderboards.
- Baseball translations — every cricket term explained through its closest
baseball equivalent, for newcomers to the sport.
🛠️ Tools
All tools are read-only.
Minor League Cricket data. ESPN does not carry the league, so its
fixtures and scores come from Kalshi's public live data: the schedule, each
game's score and state, and Kalshi's market beside it. That feed has no
ball-by-ball commentary and names no batters or bowlers, so
cricket_minor_league cannot say who is batting, who took a wicket or what
happened on a given ball. A market figure appears only when Kalshi's book is
a real price, and the model prices only the chase. The hosted server's
cricket_minor_league_info does name players: it draws on CricClubs
scorecards and results, and on Wikipedia's season articles (CC BY-SA 4.0),
which is why that data stays on the hosted server.
🚀 Quick start
1. Install
One static binary, no runtime, no interpreter, no dependencies.
Or download a prebuilt binary for macOS (Apple silicon or Intel), Linux
(x86-64 or arm64) or Windows from
Releases.
Register it with Claude Code:
2. Or configure a desktop client
Add the server to your client's config — for Claude Desktop:
Restart the client and the cricket tools appear. Live scores, the win model,
market prices and the glossary work as they are. The archive tools need the
ball-by-ball database, which is not in the binary.
3. The archive
The database is built by the
asaraog/cricket-history-data
workflow from public Cricsheet data and published
there as a release asset, history-full.db.gz (206 MB). That release is
private. With HISTORY_DB_TOKEN set to a GitHub token that can read it, the
server resolves the latest release on first use, downloads the archive once
into your OS cache directory (~/Library/Caches on macOS, ~/.cache on
Linux, %LocalAppData% on Windows) and reuses it from then on; when a later
release replaces the asset, the next start downloads the new one. Without a
token the download fails and the archive tools say the archive is missing.
Building it yourself needs no token:
Then point HISTORY_DB at the result. A file you built is opened as it is
and never replaced by a download. Limited-overs-only archives work too:
tools degrade gracefully when a format is absent.
scripts/histgen.py is the same script the workflow runs. Since 2026-10-06
its deliveries table carries wide and noball columns, so balls faced
leave out wides and a bowler's balls leave out wides and no-balls, as a
scorecard counts them. An archive built before that has neither column; the
server reads it as before, counting every row as a ball.
Since 2026-10-07 its matches table also carries a gender column, male
or female as Cricsheet records it. cricket_leaders and
cricket_team_form filter on it. Older archives (the v1 file and the
2026-10-06 rebuild) still work: without the column, a game's gender is read
off its event name, which says "Women" for Cricsheet's women's events.
⚙️ Configuration
Live-score tools work without any archive; archive tools report clearly when
the database is missing rather than inventing an answer.
📊 About the model
The win model is fitted offline, not guessed at runtime. Features are match
state (runs, wickets, balls remaining, required rate), pre-match Elo, and a
wickets × required-rate interaction — because thin batting hurts far more when
the asking rate is steep. Calibration is measured by wickets in hand: within
about one point across most of the range.
Par is per ground. A first-innings score only means something relative to
what the ground usually yields, so the innings-one segments are fitted against
a table of 371 grounds and 7 leagues rather than one global constant. Real pars
run from 153.7 to 172.5 by league alone, and further by ground. Pass venue
(and league) to cricket_win_probability and the same 80/2 at ten overs is
47% at Chinnaswamy and 60% at Newlands. Without a venue it falls back
ground → league → global, which costs about 0.006 of held-out log loss.
It cannot see injuries, weather, pitch reports or team news.
📈 Markets
cricket_market_odds reads public prices from Kalshi, a
CFTC-regulated US exchange where contracts settle at $1 and a price in cents
is the implied probability. Put beside cricket_win_probability, the gap
between the two is the edge a trader would be claiming.
This is informational only — read-only market data, no account, no orders, no
advice. The model cannot see injuries, weather or team news, which is often
exactly why it disagrees with the market. Event contracts are legal in some
jurisdictions and not others.
🙏 Data
Ball-by-ball data from Cricsheet, licensed
CC BY-SA 4.0. Live scores
from public ESPNcricinfo endpoints, and for Minor League Cricket from Kalshi's
public live data; market prices from Kalshi's public API.
This project is unaffiliated with any of them.
📝 License
BSD 3-Clause. See LICENSE.