板球mcp
板球统计书呆子的梦想,直接连接到克劳德。
板球mcp 是一个MCP(模型上下文协议)服务器,从 Cricsheet 变成了一个善于思考的蟋蟀大脑。想想ESPNcricinfo的统计大师,但你只是 *用简单的英语提问* 并获得答案。
21000+场比赛。每种格式。每一个球。所有这些都位于本地DuckDB数据库中,该数据库在毫秒内响应。
它能做什么?
问克劳德这样的问题:
- *“Kohli如何在ODI中对阵Hazlewood?”*
- *“IPL经济类最佳死亡投球手”*
- *“Kohli在ODI追逐时的平均水平”*
- *“谁接近10000次试运行?”*
- *“如果没有Hazlewood,Kohli的平均水平会是多少?”*
- *“在T20中掷球重要吗?”*
- *“IPL 2024排名和最佳表现者”*
- *“哪些投球手在死亡时拥有最好的点球百分比?”*
- *“本赛季哪些击球手在进步?”*
- *“打破罗希特·夏尔马对阵英格兰每一位投球手的记录”*
- *“谁在2024年T20世界杯决赛中影响最大?”*
- *“Bumrah的最后10局T20-他状态好吗?”*
工具(共28个)
玩家统计
| 工具 | 它做什么 |
|---|---|
search_players | 模糊姓名搜索与职业概述 |
get_player_stats | 完整的击球或保龄球统计数据(使用 perspective 参数)——平均值、SR、100秒、50秒、HS、4s、6s、少女、5wi、最佳数字 |
比赛和球队查询
| 工具 | 它做什么 |
|---|---|
search_matches | 使用筛选器+分页查找匹配项 |
get_head_to_head | 团队对团队W/L/D/T记录 |
get_match_scorecard | 完成任何比赛的击球+保龄球卡 |
记录和排行榜
| 工具 | 它做什么 |
|---|---|
get_batting_records | 按跑步次数、平均成绩、SR、100秒、50秒、6秒、4秒、HS对玩家进行排名 |
get_bowling_records | 按小门、平均、经济、SR、5wi对玩家进行排名 |
场地和合作伙伴
| 工具 | 它做什么 |
|---|---|
get_venue_stats | 场地统计数据——平均得分、击球首胜率、最高/最低总分 |
get_partnerships | 最高击球合作伙伴 |
击球手vs保龄球手对决
| 工具 | 它做什么 |
|---|---|
get_matchup | 正面交锋的统计数据(两个名字),击球手对团队保龄球(击球手+对手),或比赛排行榜(一个名字+记录类型) |
get_style_matchup | 击球手与保龄球风格(速度/旋转,左臂/右臂)或投球手与击球手 |
阶段与形势分析
| 工具 | 它做什么 |
|---|---|
get_phase_stats | 按阶段划分的击球/保龄球统计数据——力量发挥(1-6)、中间(7-15)、死亡(16-20) |
get_situational_stats | 在追逐、定位球、压力下或击球位置时的统计数据。格式感知(测试使用第4局进行追逐) |
get_toss_analysis | 投掷对结果的影响——按场地/球队/赛制分列的击球优先vs追逐获胜百分比 |
get_discipline_stats | 赢得比赛的无聊统计数据——点球%、宽球率、边界% |
团队与锦标赛
| 工具 | 它做什么 |
|---|---|
get_team_form | 最近形式——最近N次成绩、连胜、平均得分、跑步率 |
get_tournament_summary | 任何锦标赛/赛季的排名、顶级击球手、顶级投球手 |
职业与趋势
| 工具 | 它做什么 |
|---|---|
get_milestone_tracker | 接近职业生涯里程碑的球员(10000次跑动、500个小门等) |
get_emerging_players | 最近的统计数据明显优于职业基线的球员 |
get_what_if | 反事实——重新计算职业统计数据,不包括对手、投球手、场地或锦标赛 |
get_season_stats | 逐年职业细分 |
get_player_comparison | 两名球员的并排比较 |
撤职与开除
| 工具 | 它做什么 |
|---|---|
get_fielding_stats | 每个外野手的接球、树桩、跑动 |
get_dismissal_analysis | 球员如何出局(或让击球手出局)的细分 |
影响评分
| 工具 | 它做什么 |
|---|---|
get_match_impact | 比赛中每个球员的上下文加权影响得分——击球、保龄球、防守的组合 |
get_career_impact | 球员职业生涯中的综合影响得分或过滤后的比赛 |
get_player_form | 最后N局,包括个人得分、击球率和表格摘要 |
出生分析
| 工具 | 它做什么 |
|---|---|
get_innings_progression | 在比赛局数中得分不断提高 |
每个工具都支持过滤器: 格式 (测试/ODI/T20/IT20), 性别, 团队, 反对, 场地, 城市, 季节, 锦标赛,以及 日期范围.
设置
先决条件
- Node.js 18+
- Claude Desktop(或任何MCP客户端)
安装
git clone https://github.com/mavaali/cricket-mcp.git
cd cricket-mcp
npm install摄取数据
这将下载所有Cricsheet数据(约94 MB ZIP,21000多个匹配项)并将其加载到本地DuckDB数据库中:
npm run ingest需要几分钟。您将看到以下进展:
Downloading from https://cricsheet.org/downloads/all_json.zip...
Download size: 93.7 MB
Extracted 21270 JSON files
Ingested 21270/21270 matches (10,895,339 deliveries)
Creating indexes...
=== Ingestion Complete ===
Matches: 21270
Deliveries: 10895339
Players: 14406保持数据最新
Cricsheet每天都会发布新的比赛。与其重新摄入所有内容,不如只提取最近的比赛:
npm run update # last 7 days (default)
npm run update -- --days 2 # last 2 days
npm run update -- --days 30 # last 30 days下载 recently_played_N_json.zip 从Cricsheet中,跳过数据库中已有的匹配项,只插入新的匹配项。需要几秒钟。
对于完整重建(例如,对历史数据进行Cricsheet更正):
npm run ingest -- --force丰富玩家元数据
Cricsheet数据不包括击球手或保龄球风格等球员属性。回购包括 data/player_meta.csv (从 板球数据 R包,16K玩家)添加了这些属性。在第一次摄入后运行此程序:
npm run enrich -- --csv data/player_meta.csv这使得 get_style_matchup 工具——例如。, *“科利是如何对抗左臂配速的?”* 或 *“Bumrah对阵左撇子的记录”*.
注: 当您进行富时,MCP服务器不得运行(DuckDB只允许一个写连接)。请先退出Claude Desktop,运行命令,然后重新打开。
连接到克劳德桌面
将此添加到您的Claude Desktop配置中(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"cricket": {
"command": "npx",
"args": ["tsx", "/path/to/cricket-mcp/src/index.ts", "serve"]
}
}
}替换 /path/to/cricket-mcp 与实际路径。重新启动克劳德桌面。
就是这样。开始问板球问题。
连接到VS代码(复制副本)
添加 .vscode/mcp.json 在您的工作空间中:
{
"servers": {
"cricket-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "tsx", "/path/to/cricket-mcp/src/index.ts", "serve"]
}
}
}这 -y 标志防止npx提示安装确认,这将挂起MCP stdio传输。
OneLake后端(微软Fabric)
蟋蟀mcp可以通过OneLake直接从Fabric湖屋读取Delta表,而不是本地DuckDB文件。所有26个工具的工作原理不变——DuckDB delta 和 azure 扩展处理读取。
先决条件:
- Azure CLI已安装并登录(
az login) - 一个有板球桌(球员、比赛、局数、传球)和三角洲桌的织物湖屋
- Fabric门户中的工作区ID和Lakehouse ID
CLI用法:
npx tsx src/index.ts serve --backend onelake \
--workspace-id \
--lakehouse-id VS代码mcp.json:
{
"servers": {
"cricket-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y", "tsx", "/path/to/cricket-mcp/src/index.ts",
"serve", "--backend", "onelake",
"--workspace-id", "${env:FABRIC_WORKSPACE_ID}",
"--lakehouse-id", "${env:FABRIC_LAKEHOUSE_ID}"
],
"env": {
"FABRIC_WORKSPACE_ID": "",
"FABRIC_LAKEHOUSE_ID": ""
}
}
}
}注: 这env块很重要——VS代码不能继承shell环境变量(例如,从.zshrc)如果从Dock或Spotlight启动。在配置中明确设置它们可确保它们始终可用。
它是如何工作的: 启动时,crick-mcp在内存中创建一个DuckDB实例,加载 delta 和 azure 扩展,通过Azure CLI进行身份验证,并在OneLake中的每个Delta表上创建视图。当数据库在后台初始化时,MCP传输立即连接——第一个工具调用等待初始化完成,后续调用立即解析。
看 板球数据工厂 用于将Cricsheet数据加载到Fabric lakehouse的完整管道。
远程托管(HTTP传输)
默认情况下,cricket-mcp对本地mcp客户端(Claude Desktop,VS Code)使用stdio传输。要远程托管服务器,请使用HTTP传输:
npx tsx src/index.ts serve --transport http --port 3000这将在指定端口上使用单个端口启动HTTP服务器 /mcp 终点。MCP客户端通过向发送JSON-RPC请求进行连接 http://your-server:3000/mcp服务器支持多个并发客户端会话,每个会话都有自己的会话ID。
CORS标头包含在所有响应中,因此基于浏览器的MCP客户端可以开箱即用。
码头工人
构建一个自包含的Docker镜像,接收所有Cricsheet数据并通过HTTP提供服务:
docker build -t cricket-mcp .
docker run -p 3000:3000 cricket-mcp构建需要几分钟的时间(下载约94 MB的Cricsheet数据,摄入21K多场比赛,丰富玩家元数据)。生成的图像大小约为600 MB。
要在任何云提供商上部署,请将映像推送到容器注册表,并在VM、托管容器服务(cloud run、ECS、Azure container Apps)或Kubernetes上运行。
查询示例
“Kohli在ODI对阵Hazlewood的表现如何?”
用途 get_matchup 随着 batter_name: "Kohli", bowler_name: "Hazlewood", match_type: "ODI".
“IPL最佳死亡投球手”
用途 get_phase_stats 随着 phase: "death", perspective: "bowling", event_name: "Indian Premier League", sort_by: "economy".
“Kohli在ODI追逐时的记录”
用途 get_situational_stats 随着 situation: "chasing", player_name: "Kohli", match_type: "ODI".
“谁接近10000次ODI跑步?”
用途 get_milestone_tracker 随着 milestone_type: "runs", threshold: 10000, match_type: "ODI".
“如果没有Hazlewood,Kohli的平均水平会是多少?”
用途 get_what_if 随着 player_name: "Kohli", perspective: "batting", exclude_bowler: "Hazlewood", match_type: "ODI".
“IPL 2024排名和最佳表现者”
用途 get_tournament_summary 随着 event_name: "Indian Premier League", season: "2024".
“在T20中掷球重要吗?”
用途 get_toss_analysis 随着 match_type: "T20".
“印度vs澳大利亚在测试中正面交锋”
用途 get_head_to_head 随着 team1: "India", team2: "Australia", match_type: "Test".
“科利是如何对抗左臂配速的?”
用途 get_style_matchup 随着 player_name: "Kohli", perspective: "batting", grouping: "arm".
“Bumrah对阵左撇子的记录”
用途 get_style_matchup 随着 player_name: "Bumrah", perspective: "bowling".
“谁在2024年T20世界杯决赛中影响最大?”
用途 get_match_impact 随着 match_id: "1415755" (通过查找ID search_matches 第一)。
返回阶段相对影响得分:Bumrah的2/18分之4得分为经济值 17.63 因为他在死亡回合中的4.5 RPO与平均10+的比赛死亡相比是非同寻常的。Axar Patel以47分(31分)的成绩位居榜首(136.82分)。
“本赛季哪些击球手在T20中有所进步?”
用途 get_emerging_players 随着 perspective: "batting", match_type: "T20".
“在IPL中,谁在死亡时拥有最好的点球百分比?”
用途 get_discipline_stats 随着 perspective: "bowling", phase: "death", event_name: "Indian Premier League", sort_by: "dot_ball_pct".
运作原理
- 数据: Cricsheet 以JSON格式为每场国际和国内主要板球比赛提供免费、公开的逐球数据。
- 存储:The
ingest命令下载、解析并将其加载到本地 鸭数据库 数据库——一个列式分析引擎,早餐吃聚合查询。 - 服务器MCP服务器通过stdio公开了28个工具。Claude根据您的问题选择正确的工具,通过正确的过滤器,并返回统计数据。
数据库模式
星型模式中的四个表:
- 玩家 --拥有Cricsheet注册ID的14K名玩家(可选择增加击球风格、保龄球风格、角色、国家)
- 火柴 --21K场带有元数据的比赛(球队、场地、结果、锦标赛)
- 局 --局数数据(击球/保龄球队、目标、声明)
- 交付 --1090万排,每投一球一排(击球手、投球手、跑动、附加、小门)
板球逻辑处理正确
- 平均成功率 =跑动/退场(非局数)
- 球面 不包括宽体(标准惯例)
- 保龄球跑 排除byes和legbyes
- 合法交货 排除大人物和贵族
- 保龄球小门 只计算保龄球的解雇(不包括出局)
- 少女 按超水平计算
- 测试局 --追逐意味着第四局,定位球意味着第一局
数据覆盖范围和限制
所有统计数据均来自 Cricsheet 逐球数据。Cricsheet是一个开源项目,提供详细的交付级别记录,但它没有涵盖板球的全部历史。把它想象成电影中途安装的高分辨率相机。
覆盖窗口
| 格式 | 数据集中最早的匹配 | 备注 |
|---|---|---|
| 测试 | ~ 2001年12月 | 涵盖2001/02赛季以后。职业生涯主要在2002年之前的球员(Bradman、Gavaskar、Border等)将缺席或严重代表性不足。 |
| 奥迪斯 | ~ 2002年6月 | 包括2003年世界杯以后的比赛。ODI板球的前30年(1971-2002)不包括在内——没有Kapil Dev 175,没有1996年世界杯。 |
| T20I | ~ 2005年2月 | 从格式开始就接近完成(第一个T20I是在2005年2月份)。 |
| T20(国内) | ~ 2008年4月 | IPL第一季开始。还包括BBL、CPL、PSL、SA20和Cricsheet覆盖的其他国内T20联赛。 |
在撰写本文时,数据会定期更新,包括2026年初之前的匹配结果。
这在实践中意味着什么
- 现役或近期球员的职业统计数据 (Smith、Kohli、Root、Bumrah等)全面可靠。
- 2002年之前首次亮相的球员的职业统计数据 这只会反映他们职业生涯的尾声。例如,Tendulkar在这里的数字大约涵盖了他过去的12年,而不是全部24年。
- 历史排行榜 它们实际上是“21世纪排行榜”。它们不应该与国际刑事法院的官方职业记录相提并论,后者涵盖了游戏的整个历史。
- 地点和正面记录 仅反映覆盖窗口内的比赛,而不是地面或两队之间的完整历史记录。
什么不受限制
在覆盖窗口内,数据是逐球的——每次传球、每次跑动、每次罚下、每次加时。阶段分析、比赛细分、命中率、点球百分比和其他细粒度指标都来自实际交付数据,而不是汇总的记分卡。
更新日志
v0.8.0
- 阶段相对影响评分:保龄球经济现在按每个阶段与该阶段比赛的平均经济进行评分。在死亡回合中放弃6个RPO(典型情况下为10+)比在中间回合中获得相同的经济效益获得更多的积分。击球获得死亡回合SR奖金(1.3倍)和动力进攻奖金(1.1倍)。
v0.7.0
- 玩家影响力评级:3个新工具(
get_match_impact,get_career_impact,get_player_form)计算结合击球贡献、保龄球小门质量+经济性和防守的上下文加权影响得分 - 影响得分包括:跑动贡献率%、击球率与比赛平均值、进入难度、追逐失败折扣、小门质量(定位球/明星击球手、最高顺序、搭档休息)、经济性与比赛跑动率、防守驳回、比赛重要性(锦标赛阶段+接近度)
- 25 → 28 tools
v0.6.0
- HTTP传输:
--transport http --port 3000启动具有会话管理和CORS支持的远程托管HTTP服务器 - Dockerfile:多阶段构建,通过HTTP接收数据并提供服务--
docker build && docker run部署
v0.5.0
- 整合匹配工具(27→25):
get_matchup现在,您可以在一个工具中处理特定的对决、击球手与球队的细分以及对决排行榜 - 预先计算
bowling_style_broad和bowling_style_arm富集期间的列--在查询时消除每行CASE表达式 - 简体
search_players仅限玩家查询(1090万次配送不再加入) - 为小门和比赛查询的交付添加了复合索引
- 通过以问题为导向的格式和交叉引用,对所有25个工具描述进行了细化,以实现更好的LLM工具布线
- 添加了具有特定格式日期范围的数据覆盖文档
v0.4.0
- OneLake后端:通过DuckDB直接从Microsoft Fabric湖屋读取Delta表
delta+azure扩展(--backend onelake) - 延迟连接初始化:MCP传输立即连接;数据库设置在后台运行。修复了OneLake扩展需要时间加载时VS Code MCP客户端超时的问题。
- VS Code
.vscode/mcp.json配置已记录
v0.3.0
- 玩家丰富管道:
npm run enrich从捆绑的CSV加载击球/保龄球风格元数据(板球数据R包中的16K玩家) - 新
get_style_matchup工具:按保龄球风格(速度/旋转、手臂类别)查询击球统计数据或按击球手查询保龄球统计数据 - 现有数据库的架构迁移——启动时自动添加新列
- 固定的
BOWLING_WICKET_KINDS不在SQL模板文本中插值(影响所有wicket计数查询)
v0.2.0版本
- 合并类似工具(28→25):
get_matchup替换了单独的击球手vs投球手/投球手vs击球手工具,get_player_stats替换单独的击球/保龄球统计工具 - 增加了5个新工具:防守统计、解雇分析、赛季统计、球员比较、局数进展
- 提取共享常量(
BOWLING_WICKET_KINDS,PHASE_OVERS)减少重复
v0.1.0
- 23个工具,涵盖球员统计、对决、记录、阶段/情境分析、球队形式、锦标赛、里程碑、新兴球员、假设情景
- 增量数据更新(
npm run update)使用Cricsheet最近的比赛订阅源 - 完整摄取管道:下载→ 解析→ 加载到DuckDB
- 19评价
数据源
所有数据均来自 Cricsheet,提供免费、开放的板球数据。衷心感谢他们使这一切成为可能。
许可证
麻省理工学院
