NPB MCP服务器
 ](https://badge.fury.io/js/@mitsuboshi%2Fnpb-mcp-server) 
提供日本职业棒球(NPB)的选手信息Model Context Protocol (MCP) 服务器。
机能
- NPB全12球团的信息取得
- 选手一覧の取得(球团别)
- 选手检索(姓名、位置、背上号码等)
- 获得选手的详细信息(简介、年度成绩、总计成绩)
- 数据缓存功能
- 支持两种传输模式(stdio/HTTP)
安装
对于本地开发
npm install
npm run buildnpx中单独提供
发布软件包后,无需安装npx中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积
# stdioモード
npx npb-mcp-server
# HTTPモード
MCP_TRANSPORT=http npx npb-mcp-server在本地npx测试:
npm link
npx npb-mcp-server用法
此服务器在两种传输模式下运行:
模式1:stdio(默认值)
Claude Desktop等stdio用于基本客户端。
Claude Desktop配置文件 claude_desktop_config.json 添加:
指定本地路径:
{
"mcpServers": {
"npb": {
"command": "node",
"args": ["/path/to/npb-mcp-server/dist/index.js"]
}
}
}npx(发布后):
{
"mcpServers": {
"npb": {
"command": "npx",
"args": ["npb-mcp-server"]
}
}
}模式2:HTTP(Streaming)
Hono使用HTTP Streaming Transport模式。可以进行更快的通信。
起动方法:
# HTTPモードで起動(デフォルトポート: 3000)
MCP_TRANSPORT=http node dist/index.js
# npxを使用
MCP_TRANSPORT=http npx npb-mcp-server
# カスタムポートで起動
MCP_TRANSPORT=http PORT=8080 node dist/index.jsClaude Desktop时褪色为此颜色
指定本地路径:
{
"mcpServers": {
"npb": {
"command": "node",
"args": ["/path/to/npb-mcp-server/dist/index.js"],
"env": {
"MCP_TRANSPORT": "http",
"PORT": "3000"
}
}
}
}npx使用(发布后):
{
"mcpServers": {
"npb": {
"command": "npx",
"args": ["npb-mcp-server"],
"env": {
"MCP_TRANSPORT": "http",
"PORT": "3000"
}
}
}
}端点:
GET /health-健康检查POST /mcp- MCP消息传递
可用工具
1.列表_团队
NPB取得全部12支球队的一览表。
参数:
league(optional): 筛选的联盟(central或pacific)
例:
{
"league": "central"
}2.get_team_players
取得指定球队的选手一览。
参数:
team_id(required): 球団ID
球団ID一覧:
- 中央联盟:
g(巨人队),t(老虎),db(贝伊斯塔斯),c(卡普),s(斯瓦罗斯),d(龙) - 太平洋联盟:
h(霍克斯),f(Fighters),m(Marines),e(老鹰乐队),bs(巴法罗斯),l(狮子队)
例:
{
"team_id": "g"
}3.搜索图层
搜索选手。
参数:
name(optional): 选手名(部分一致)
- 无论有无空间都可以检索(例如:“牧秀悟”、“牧秀悟”、“牧秀悟”) - 也可以用平假名进行检索(例如:“柴”“柴”) - 也可以用片假名进行检索(例如:“Maki”)
team_id(optional): 球団IDposition(optional): 位置(pitcher,catcher,infielder,outfielder)number(optional): 背番号
例:
{
"name": "大谷",
"position": "pitcher"
}{
"name": "まき しゅうご"
}4.获取玩家详细信息
获得选手的详细信息(简介、年度成绩、总计成绩)。
参数:
player_id(required): 8数位选手ID
选手ID获取方法: get_team_players啊search_players获得选手信息的playerId请使用字段。
例:
{
"player_id": "51155136"
}响应:
{
"profile": {
"playerId": "51155136",
"name": "東 克樹",
"uniformNumber": "11",
"team": "横浜DeNAベイスターズ",
"position": "投手",
"throwingHand": "左",
"battingHand": "左",
"height": "170cm",
"weight": "80kg",
"birthDate": "1995年11月29日",
"career": "愛工大名電高→立命館大",
"draftInfo": "2017年ドラフト1位"
},
"pitchingStats": [
{
"year": "2018",
"team": "DeNA",
"games": 26,
"wins": 9,
"losses": 6,
...
}
],
"careerPitching": {
"games": 120,
"wins": 60,
"losses": 30,
"era": 2.43
}
}数据源
这个服务器 NPB网站标题 从Web Scraping对较大场景进行渲染期间已观察到该故障。
开発
测试
# テスト実行
npm test
# ウォッチモードでテスト
npm run test:watch
# カバレッジ付きテスト
npm run test:coverage测试内容:
- 测试缓存功能(9个测试)
- 球团数据验证(12测试)
- MCP测试工具函数(5个测试)
总共包含26个测试案例。
编码质量
这个项目ESLint和Prettier中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
推荐命令:
# すべての自動修正を一括実行(Prettier → ESLint)
npm run fix
# すべてのチェックを並列実行(Lint + Format + Test)
npm run check单个命令:
# ESLintでコードチェック
npm run lint
# ESLintで自動修正
npm run lint:fix
# Prettierでフォーマットチェック
npm run format:check
# Prettierで自動フォーマット
npm run format配置文件:
.prettierrc- Prettier设定eslint.config.js- ESLint 9.x 平面设置
提交前建议的流程:
npm run fix # コードを自動修正
npm run check # すべてのチェックを実行构建
# TypeScriptをビルド
npm run build
# ウォッチモードでビルド
npm run devCI/CD
这个项目GitHub Actions中所述修改相应参数的值。
自动测试
触发器:
main、develop到分支push- 所有Pull Request
测试内容:
- Node.js 18.x, 20.x, 22.x 在中运行测试
- 确认构建
- 生成测试覆盖范围
自动公开
触发器:
- GitHub在中创建版本
发放步骤:
正常提交不需要进行版本更改。仅在发布时:
# パッチバージョン更新(バグ修正: 0.1.0 → 0.1.1)
npm run release:patch
# マイナーバージョン更新(新機能: 0.1.0 → 0.2.0)
npm run release:minor
# メジャーバージョン更新(破壊的変更: 0.1.0 → 1.0.0)
npm run release:major之后、GitHub中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
所需设置:
- GitHub Secrets的
NPM_TOKEN(自动标记推荐)
许可证
麻省理工学院
