本服务器基于Model Context Protocol (MCP),专注于从basketball-reference.com获取全面的NBA球员数据。它提供了丰富的球员统计信息,包括职业生涯数据、赛季对比、高级指标、投篮数据等。
pip install nba-player-stats-mcp
git clone https://github.com/ziyadmir/nba-player-stats-mcp
cd nba-player-stats-mcp
pip install -r requirements.txt
# 如果从PyPI安装
nba-player-stats-server
# 如果从源代码运行
python src/server.py
{
"mcpServers": {
"nba-player-stats": {
"command": "python",
"args": ["path/to/basketball/src/server.py"],
"cwd": "path/to/basketball"
}
}
}
本MCP服务器提供了三个层次的NBA球员数据统计工具:
这是安装NBA球员数据MCP服务器最简单的方法:
pip install nba-player-stats-mcp
如果需要进行开发或获取最新更改:
git clone https://github.com/ziyadmir/nba-player-stats-mcp
cd nba-player-stats-mcp
python -m venv venv
source venv/bin/activate # 在Windows上:venv\Scripts\activate
pip install -e .
# 或者安装开发依赖
pip install -e ".[dev]"
# 如果从PyPI安装
nba-player-stats-server
# 如果从源代码运行
python src/server.py
# 首先导入修复模块
import fix_basketball_reference
from basketball_reference_scraper.players import get_stats
# 获取勒布朗的职业生涯场均数据
stats = get_stats('LeBron James', stat_type='PER_GAME', ask_matches=False)
# 获取特定赛季的数据
stats_2023 = stats[stats['SEASON'] == '2022-23']
# 获取季后赛数据
playoff_stats = get_stats('LeBron James', stat_type='PER_GAME', playoffs=True, ask_matches=False)
更多详细示例请参考example_usage.py
。
get_player_career_stats
:获取NBA球员的完整职业生涯统计信息。
player_name
(字符串,必填):球员姓名(例如,“LeBron James”)stat_type
(字符串,可选):数据类型 - “PER_GAME”、“TOTALS”、“PER_MINUTE”、“PER_POSS”、“ADVANCED”get_player_season_stats
:获取特定赛季的统计信息。
player_name
(字符串,必填):球员姓名season
(整数,必填):赛季年份(例如,2023表示2022 - 23赛季)stat_type
(字符串,可选):数据类型include_playoffs
(布尔值,可选):如果可用,是否包含季后赛数据get_player_advanced_stats
:获取高级统计信息(PER、TS%、WS、BPM、VORP等)。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示所有赛季get_player_per36_stats
:获取每36分钟的统计信息(经过节奏调整)。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示所有赛季compare_players
:比较两名NBA球员的统计信息。
player1_name
(字符串,必填):第一名球员的姓名player2_name
(字符串,必填):第二名球员的姓名stat_type
(字符串,可选):要比较的数据类型season
(整数,可选):特定赛季,或None表示职业生涯对比get_player_shooting_splits
:获取详细的投篮统计信息和细分数据。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示职业生涯数据get_player_totals
:获取总计统计信息(非平均值)。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示职业生涯总计get_player_playoff_stats
:获取季后赛统计信息,并与常规赛进行对比。
player_name
(字符串,必填):球员姓名stat_type
(字符串,可选):数据类型get_player_headshot_url
:获取basketball-reference.com的球员头像URL。
player_name
(字符串,必填):球员姓名get_player_career_highlights
:获取职业生涯亮点和成就。
player_name
(字符串,必填):球员姓名get_player_game_log
:获取特定赛季的逐场比赛统计信息。
player_name
(字符串,必填):球员姓名season
(整数,必填):赛季年份(例如,2024)playoffs
(布尔值,可选):是否获取季后赛比赛记录date_from
(字符串,可选):开始日期,格式为'YYYY - MM - DD'date_to
(字符串,可选):结束日期,格式为'YYYY - MM - DD'get_player_specific_stat
:获取球员在给定赛季的特定统计信息。非常适合回答诸如“斯蒂芬·库里2018年的三分命中率是多少?”之类的问题。
player_name
(字符串,必填):球员姓名stat_name
(字符串,必填):特定数据(例如,“PTS”、“3P%”、“PER”)season
(整数,必填):赛季年份get_player_vs_team_stats
:获取职业生涯对阵特定球队的统计信息。
player_name
(字符串,必填):球员姓名team_abbreviation
(字符串,必填):球队代码(例如,“GSW”、“LAL”)stat_type
(字符串,可选):数据类型get_player_awards_voting
:获取奖项和投票历史。
player_name
(字符串,必填):球员姓名award_type
(字符串,可选):“MVP”、“DPOY”、“ROY”、“SMOY”、“MIP”get_player_monthly_splits
:获取按月份细分的统计信息。
player_name
(字符串,必填):球员姓名season
(整数,必填):赛季年份month
(字符串,可选):特定月份,或None表示所有月份get_player_clutch_stats
:获取关键时刻的表现。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示职业生涯get_player_playoffs_by_year
:获取特定年份的详细季后赛统计信息。
player_name
(字符串,必填):球员姓名season
(整数,必填):赛季年份get_player_career_trends
:分析职业生涯趋势和进展,包括逐年变化和衰退/进步模式。
player_name
(字符串,必填):球员姓名stat_name
(字符串,可选):要分析趋势的数据(默认:“PTS”)window_size
(整数,可选):移动平均的年数(默认:3)get_player_game_highs
:获取职业生涯高光比赛和里程碑表现(40分以上比赛、50分以上比赛、三双)。
player_name
(字符串,必填):球员姓名threshold_points
(整数,可选):高分比赛的得分阈值(默认:40)include_triple_doubles
(布尔值,可选):是否统计三双比赛get_player_situational_splits
:获取特定场景下的表现细分数据,包括主场/客场、背靠背比赛、胜负情况等。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示职业生涯split_type
(字符串,可选):“home_away”、“rest_days”、“monthly”、“win_loss”get_player_quarter_stats
:获取每季度的表现,特别是第四季度和加时赛的数据。
player_name
(字符串,必填):球员姓名season
(整数,可选):特定赛季,或None表示职业生涯quarter
(字符串,可选):“1st”、“2nd”、“3rd”、“4th”、“OT”或“all”get_player_milestone_tracker
:跟踪职业生涯里程碑的进展,并进行成就预测。
player_name
(字符串,必填):球员姓名milestone_type
(字符串,可选):“points”、“assists”、“rebounds”、“3pm”、“games”get_player_rankings
:获取球员在各个类别中的历史排名。
player_name
(字符串,必填):球员姓名category
(字符串,可选):“points”、“assists”、“rebounds”、“3pm”、“steals”、“blocks”本MCP服务器可以回答以下示例问题:
重要提示:basketball_reference_scraper
库与当前basketball-reference.com网站结构存在兼容性问题。本服务器包含了针对这些问题的自动修复。
per_game
→ per_game_stats
totals
→ totals_stats
per_minute
→ per_minute_stats
pd.read_html()
的弃用警告这些修复在服务器启动时通过fix_basketball_reference.py
模块自动应用。
修复涉及更新basketball_reference_scraper/players.py
文件:
from io import StringIO
get_stats
函数中):# 将旧的表格ID映射到新的ID
table_id_map = {
'per_game': 'per_game_stats',
'totals': 'totals_stats',
'per_minute': 'per_minute_stats',
'per_poss': 'per_poss_stats',
'advanced': 'advanced'
}
# 替换:df = pd.read_html(table)[0]
df = pd.read_html(StringIO(table))[0]
career_rows = df[df['SEASON']=='Career'].index
if len(career_rows) > 0:
career_index = career_rows[0]
# ... 其余逻辑
如果要将这些修复贡献回原始库,请参阅贡献指南部分。
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# 运行所有测试
pytest
# 运行测试并生成覆盖率报告
pytest --cov=src --cov-report=html
# 运行特定测试
pytest tests/test_integration.py -v
测试修复模块:
python example_usage.py
要添加新工具:
server.py
中创建函数:@mcp.tool()
async def get_player_new_stat(
player_name: str,
**kwargs
) -> Dict[str, Any]:
"""工具描述"""
try:
# 实现逻辑
pass
except Exception as e:
logger.error(f"Error: {e}")
return {"error": str(e)}
basketball_reference_scraper
存在以下问题:
“未找到表格”错误
fix_basketball_reference.py
自动应用未找到球员
结果为空
运行测试套件:
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 运行测试并生成覆盖率报告
pytest --cov=src --cov-report=html
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)要将我们的修复贡献回原始库:
fix_basketball_reference.py
中的更改本项目采用MIT许可证 - 详情请参阅LICENSE文件。
如有问题和功能请求,请使用 GitHub问题跟踪器。