NPB球员信息服务器

一个提供日本职业棒球(NPB)球员信息的Model Context Protocol (MCP)服务器,支持球员信息获取、搜索和详细数据查询功能。

  • by MITSUBOSHI
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 MITSUBOSHI/npb-mcp-server

使用说明

NPB MCP服务器

提供日本职业棒球(NPB)的选手信息Model Context Protocol (MCP) 服务器。

机能

  • NPB全12球团的信息取得
  • 选手一覧の取得(球团别)
  • 选手检索(姓名、位置、背上号码等)
  • 获得选手的详细信息(简介、年度成绩、总计成绩)
  • 数据缓存功能
  • 支持两种传输模式(stdio/HTTP)

安装

对于本地开发

npm install
npm run build

npx中单独提供

发布软件包后,无需安装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.js

Claude 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): 球団ID
  • position (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 dev

CI/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(自动标记推荐)

许可证

麻省理工学院