棒球mcp
用于大联盟棒球和小联盟棒球数据的MCP(模型上下文协议)服务器。
概述
此MCP服务器通过官方API和网络抓取提供对MLB、小联盟棒球和日本职业棒球(NPB)数据的全面访问。它允许您搜索球员、球队、查看赛程、查看排名,并访问各级职业棒球的比赛数据,包括Triple-A、Double-A、High-A、Single-A、新秀联赛和日本职业棒球。
特性
球员数据
- 按姓名搜索玩家(所有级别的现役和退役玩家)
- 按ID检索详细的玩家信息
- 获取美国职业棒球大联盟和小联盟的全面球员统计数据(职业生涯、赛季、比赛日志)
- 访问击球、投球和防守统计数据
- 新增:获取Statcast击球指标 (出口速度、发射角度、枪管速度)-仅限MLB
- 新增:获取Statcast投球指标 (旋转速率、速度、俯仰运动)-仅限MLB
团队数据
- 搜索和浏览美国职业棒球大联盟和所有小联盟级别的球队
- 获取详细的团队信息
- 查看球队名单(现役,40人,整个赛季)
- 访问团队统计数据和历史数据
游戏数据
- 通过日期过滤查看任何联赛级别的比赛日程
- 获取详细的比赛信息和拳击比分(美国职业棒球大联盟和小联盟)
- 访问正在进行的游戏的实时游戏提要(仅限美国职业棒球大联盟)
- 查看游戏状态和分数
支架
- 查看当前联盟排名(仅限MLB)
- 访问分区排名
- 查看通配符排名
小联盟支持
- 新增:完全支持小联盟数据 包括:
- AAA级 - 双A(AA) - 高A(A+) - 单曲A(A) - 新秀(R)
- 使用ID获取可用的体育/联赛
- 访问所有小联盟级别的球员统计数据、球队名单和时间表
NPB(日本棒球)支持
- 新:日本职业棒球整合 特点:
- 在中央和太平洋联赛中搜索球员 - 所有12个NPB团队的团队信息 - 玩家统计数据(传统和高级指标) - 支持罗马化的日语姓名搜索 - 智能玩家选择:自动找到具有NPB统计数据的正确玩家 - 多源数据聚合: - 棒球参考:所有NPB玩家的历史数据(1936年至今) - NPB官员:当前名册和最新统计数据(2008年至今) - 历史报道:像Sadaharu Oh这样的传奇人物的完整职业生涯统计数据(868 HRs)
著名的NPB玩家:
- 传说:吴贞治、长岛重雄、野村克也、前本健夫
- MLB跨界铃木一郎、大谷正平、松井秀树、于大维、野茂秀
- 当前明星:村上春树、山田彻、山本义信
- 完整的职业统计 包括逐年细分
安装
此项目使用 uv 用于Python包管理。要安装:
# Clone the repository
git clone https://github.com/yourusername/baseball-mcp.git
cd baseball-mcp
# Install dependencies with uv
uv sync
# Install the package in editable mode (for development)
uv pip install -e .全局安装(建议用于Claude Code)
要使棒球mcp服务器在所有Claude Code实例中全局可用,请执行以下操作:
# From the baseball-mcp directory, install globally
uv tool install .
# Add the MCP server to Claude Code at user scope
claude mcp add baseball-mcp -s user -- baseball-mcp全局安装后 baseball-mcp 命令将在系统范围内可用,Claude Code将能够从任何目录使用它。
用法
运行MCP服务器
如果全局安装:
baseball-mcp或者直接从源代码运行:
uv run src/baseball_mcp_server.py可用工具
get_available_sports
在美国职棒大联盟统计API中获取所有可用运动/联赛的列表。
参数: 无
例子:
{
"tool": "get_available_sports",
"arguments": {}
}search_player
按姓名搜索棒球运动员(所有级别)。
参数:
search_str(字符串,必填):要搜索的玩家名称sport_id(整数,可选):运动ID(MLB/MiLB为1,NPB为31)
例子:
{
"tool": "search_player",
"arguments": {
"search_str": "Jose Altuve"
}
}NPB示例:
{
"tool": "search_player",
"arguments": {
"search_str": "Munetaka Murakami",
"sport_id": 31
}
}get_player
获取特定MLB球员的详细信息。
参数:
person_id(整数,必填):唯一玩家标识符season(字符串,可选):游戏季节accent(布尔值,可选):在名称中包含重音符号(默认值:true)
例子:
{
"tool": "get_player",
"arguments": {
"person_id": 514888,
"season": "2024"
}
}get_player_stats
获取特定球员(MLB、小联盟或NPB)的统计数据。
参数:
person_id(整数/字符串,必填):唯一玩家标识符(int表示MLB/MiLB,字符串表示NPB)stats(字符串,必填):统计类型:
- MLB/MiLB:“赛季”、“职业生涯”、“年复一年”、“游戏日志” - NPB:“击球”、“投球”或“逐年”(按赛季细分)
season(字符串,可选):游戏季节sport_id(整数,可选):运动ID-使用1表示MLB(默认),或:
- 11:AAA级 - 12:双A(AA) - 13:高A(A+) - 14:单A(A) - 16:新秀(右) - 31:日本职业棒球
group(字符串,可选):统计组(例如,“击球”、“投球”、“防守”)
例子:
{
"tool": "get_player_stats",
"arguments": {
"person_id": 514888,
"stats": "season",
"season": "2024",
"group": "hitting"
}
}search_teams
搜索棒球队(MLB、小联盟或NPB)。
参数:
season(字符串,可选):游戏季节sport_id(整数,可选):运动ID-使用1表示MLB(默认),或:
- 11-14、16:小联盟ID - 31:NPB(返回全部12支队伍)
active_status(字符串,可选):'Y'表示活动,'N'表示非活动,'B'表示两者都有(默认值:'Y\])league_id(整数,可选):联盟ID(AL为103,NL为104)-仅限MLBdivision_id(整数,可选):部门ID
例子:
{
"tool": "search_teams",
"arguments": {
"season": "2024",
"league_id": 103
}
}get_team
获取特定MLB球队的详细信息。
参数:
team_id(整数,必填):唯一团队标识符season(字符串,可选):游戏季节
例子:
{
"tool": "get_team",
"arguments": {
"team_id": 117
}
}get_team_roster
获取特定MLB球队的名单。
参数:
team_id(整数,必填):唯一团队标识符roster_type(字符串,可选):排班类型(默认值:“活动”)season(字符串,可选):游戏季节date(字符串,可选):特定日期(格式:YYYY-MM-DD)
例子:
{
"tool": "get_team_roster",
"arguments": {
"team_id": 117,
"roster_type": "40Man"
}
}get_schedule
获取MLB比赛时间表。
参数:
sport_id(整数,可选):运动ID(默认值:MLB为1)season(字符串,可选):游戏季节start_date(字符串,可选):开始日期(格式:YYYY-MM-DD)end_date(字符串,可选):结束日期(格式:YYYY-MM-DD)team_id(整数,可选):按特定团队筛选game_type(字符串,可选):比赛类型(例如,“R”代表常规赛)
例子:
{
"tool": "get_schedule",
"arguments": {
"start_date": "2024-07-01",
"end_date": "2024-07-07",
"team_id": 117
}
}get_game_info
获取特定游戏的详细信息。
参数:
game_pk(整数,必填):代表游戏的唯一主键
例子:
{
"tool": "get_game_info",
"arguments": {
"game_pk": 717676
}
}get_standings
获取联赛排名。
参数:
league_id(整数,必填):联赛ID(AL为103,NL为104)season(字符串,可选):游戏季节standings_type(字符串,可选):排名类型(默认:“常规赛季”)date(字符串,可选):特定日期(格式:YYYY-MM-DD)
例子:
{
"tool": "get_standings",
"arguments": {
"league_id": 103,
"season": "2024"
}
}get_live_game_feed
获取正在进行的游戏的实时馈送数据。
参数:
game_pk(整数,必填):代表游戏的唯一主键
例子:
{
"tool": "get_live_game_feed",
"arguments": {
"game_pk": 717676
}
}get_player_statcast_batting
获取球员的Statcast击球指标,包括退出速度、发射角度和桶速。
参数:
player_name(字符串,必填):玩家的全名(例如“Aaron Judge”)start_date(字符串,可选):YYYY-MM-DD格式的开始日期end_date(字符串,可选):YYYY-MM-DD格式的结束日期season(字符串,可选):季节年份(例如“2024”)
例子:
{
"tool": "get_player_statcast_batting",
"arguments": {
"player_name": "Aaron Judge",
"season": "2024"
}
}退货:
- 平均和最大出口速度
- 发射角度统计
- 枪管率和重击率
- 预期击球率(xBA)和wOBA
- 节距类型细分
get_player_statcast_pitching
获取球员的Statcast投球指标,包括旋转速度、速度和投球移动。
参数:
player_name(字符串,必填):玩家的全名(例如“Gerrit Cole”)start_date(字符串,可选):YYYY-MM-DD格式的开始日期end_date(字符串,可选):YYYY-MM-DD格式的结束日期season(字符串,可选):季节年份(例如“2024”)
例子:
{
"tool": "get_player_statcast_pitching",
"arguments": {
"player_name": "Gerrit Cole",
"season": "2024"
}
}退货:
- 按俯仰类型划分的俯仰速度(平均值和最大值)
- 按音高类型划分的旋转速率
- 俯仰运动(水平和垂直断裂)
- 音高使用百分比
- Whiff速率
需求
- Python 3.12+
uv包管理器- 中列出的依赖关系
pyproject.toml
发展
项目结构:
baseball-mcp/
├── src/
│ ├── baseball_mcp_server.py # Main MCP server implementation
│ ├── mlb_stats_api.py # MLB Stats API client functions
│ ├── statcast_api.py # Statcast/pybaseball client functions
│ ├── data_utils.py # Utilities for formatting MLB data
│ └── cache_utils.py # Caching mechanism for API responses
├── test/
│ ├── test_dodgers_stats.py # Example test script
│ ├── test_statcast.py # Statcast tools test script
│ ├── test_mlb_stats_api.py # Unit tests for MLB Stats API
│ └── test_statcast_api.py # Unit tests for Statcast API
├── pyproject.toml # Project configuration and dependencies
├── README.md # User documentation
└── CLAUDE.md # Developer documentation例子
小联盟示例
获取可用的体育/联赛
{
"tool": "get_available_sports",
"arguments": {}
}获得AAA级团队
{
"tool": "search_teams",
"arguments": {
"sport_id": 11
}
}获取小联盟球员统计数据
{
"tool": "get_player_stats",
"arguments": {
"person_id": 702616,
"stats": "season",
"sport_id": 11,
"season": "2024"
}
}*注意:此示例获取Jackson Holliday的Triple-A统计数据*
获得双A时间表
{
"tool": "get_schedule",
"arguments": {
"sport_id": 12,
"start_date": "2024-06-01",
"end_date": "2024-06-07"
}
}MLB示例
Example of getting the Dodgers offensive stats as of June 21 2025
Example of Aaron Judge's hard hit rate data
Example of Clayton Kershaw's spin rate data
小联盟示例
Example of Jac Caglianone's minor league stats in 2025
NPB示例
组建NPB团队
{
"tool": "search_teams",
"arguments": {
"sport_id": 31
}
}搜索NPB玩家
{
"tool": "search_player",
"arguments": {
"search_str": "Murakami",
"sport_id": 31
}
}获取NPB玩家统计数据
{
"tool": "get_player_stats",
"arguments": {
"person_id": "npb_munetaka_murakami_2024",
"stats": "batting",
"sport_id": 31,
"season": "2024"
}
}获取历史NPB统计数据(传奇)
{
"tool": "search_player",
"arguments": {
"search_str": "Sadaharu Oh",
"sport_id": 31
}
}然后获取他们的职业统计数据:
{
"tool": "get_player_stats",
"arguments": {
"person_id": "br_oh----000sad",
"stats": "batting",
"sport_id": 31
}
}获取NPB逐年统计数据
关于NPB职业生涯的逐季细分:
{
"tool": "get_player_stats",
"arguments": {
"person_id": "br_cabrer001ale",
"stats": "yearByYear",
"sport_id": 31
}
}获取MLB球员的NPB统计数据
搜索在两个联赛中都打过球的球员:
{
"tool": "search_player",
"arguments": {
"search_str": "Ichiro Suzuki",
"sport_id": 31
}
}缓存
服务器实现了基于文件的缓存机制来提高性能:
- 默认情况下,Statcast数据缓存24小时
- 缓存文件存储在
.cache目录 - 对相同数据的后续请求将从缓存中提供服务
api参考
此服务器使用:
- MLB统计API (statsapi.mlb.com)获取玩家、团队和游戏数据
- 棒球野蛮人 (通过pybaseball)获取Statcast指标,包括出口速度、发射角度和旋转速率
- NPB官方网站 (npb.jp)日本棒球统计数据(2008年至今)
