baseball-stats-mcp
Provides tools for querying MLB data via the official MLB Stats API, including player season stats, leaderboards, pitcher luck checks, player search, and standings with derived sabermetric metrics such as FIP, K-BB%, BABIP, LOB%, and Pythagorean expected wins.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@baseball-stats-mcpCheck Chris Sale's 2025 pitcher luck with ERA vs FIP"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
baseball-stats-mcp
MLB와 KBO 기록을 Claude가 직접 조회하고, 원본 사이트가 주지 않는 세이버메트릭스 지표(FIP, K-BB%, LOB%, ISO, BABIP, 피타고리안 승률 등)를 서버에서 계산해서 돌려주는 MCP 서버.
MLB: 공식 MLB Stats API(statsapi.mlb.com)를 실시간 조회. API 키 불필요.
KBO: 직접 내려받은 시즌 CSV를 읽음. (KBO 공식 기록실은 robots.txt로 자동 수집을 막고 있어서 스크래퍼를 넣지 않았다.)
두 리그 모두 같은 내부 표현(BattingLine, PitchingLine)으로 변환한 뒤 같은 지표 코드를 타기 때문에, "KBO 마무리와 MLB 마무리의 K-BB%" 같은 리그 간 비교도 같은 기준으로 나온다.
툴
툴 | 하는 일 |
| 선수 시즌 기록 + 파생 지표 (타자: OPS/ISO/BABIP/BB%/K%, 투수: ERA/FIP/ERA-FIP/K-BB%/BABIP/LOB%) |
| 아무 지표로나 순위 (규정타석/이닝 필터, 팀 필터, 최소 PA/IP) |
| ERA vs FIP 괴리 → BABIP·LOB%를 리그 평균과 비교 → 운/실력 신호와 주의사항 |
| 영문 이름으로 MLB 선수 ID 찾기 |
| 지구별 순위 + 득실차 + 피타고리안 기대 승수 + 운(실제 승 - 기대 승) |
| 불러온 KBO CSV 목록, 행 수, 컬럼 문제 진단 |
모든 툴은 읽기 전용이고, format: "json"을 주면 마크다운 대신 구조화된 JSON을 반환한다.
Related MCP server: MLB SportRadar MCP Server
설치
uv가 있으면:
cd baseball-stats-mcp
uv sync # 의존성 + 개발용(pytest) 설치
uv run pytest # 네트워크 없이 목업으로 동작Python 3.10 이상, MCP Python SDK 2.x(MCPServer) 기준이다.
실제 MLB API로 확인하려면 uv run python scripts/live_check.py — 서버를 stdio로 띄워 툴을 하나씩 호출하고 결과를 출력한다.
Claude에 연결
Claude Code
claude mcp add --env KBO_DATA_DIR=/절대경로/baseball-stats-mcp/data/kbo --transport stdio baseball-stats \
-- uv --directory /절대경로/baseball-stats-mcp run baseball-stats-mcpClaude Desktop — claude_desktop_config.json에 추가 (Windows 예시):
{
"mcpServers": {
"baseball-stats": {
"command": "uv",
"args": ["--directory", "C:\\Users\\<you>\\baseball-stats-mcp", "run", "baseball-stats-mcp"],
"env": { "KBO_DATA_DIR": "C:\\Users\\<you>\\baseball-stats-mcp\\data\\kbo" }
}
}
}KBO_DATA_DIR를 생략하면 프로젝트의 data/kbo/를 쓴다. 저장 후 Claude Desktop을 재시작.
KBO 데이터 넣기
data/kbo/README.md 참고. 요약:
data/kbo/hitters_2026.csv,data/kbo/pitchers_2026.csv형식으로 저장헤더는 KBO 기록실 표기(
선수명, 팀명, PA, AB, H, 2B, ...) 그대로 써도 되고 영문도 됨엑셀에서 저장한 CP949 CSV도 읽음
리그 FIP 상수는 투수 파일 전체 합계로 계산하므로, 전 투수가 들어 있어야 정확함. 일부만 있으면
league_overrides.json으로 상수를 직접 지정
이렇게 물어보면 된다
"Chris Sale 2025 시즌 운 체크해줘"
"2026 MLB 규정이닝 투수 K-BB% 상위 10명"
"2026 내셔널리그 동부 피타고리안 승률이랑 실제 승수 차이 보여줘"
"KBO 2026 삼성 타자 ISO 순위" (CSV 필요)
구조
src/baseball_stats_mcp/
lines.py 리그 공통 기록 단위 (이닝은 아웃카운트로 저장해 .1=1/3 문제 방지)
metrics.py 지표 계산, 리그 컨텍스트(cFIP 등), 운 체크, 피타고리안
mlb.py MLB Stats API 클라이언트 (10분 캐시, 트레이드 선수 합산, 동명이인 처리)
kbo.py KBO CSV 로더 (한/영 컬럼 별칭, CP949, '144 1/3' 이닝 파싱)
formatting.py 마크다운/JSON 출력
server.py MCP 툴 정의
tests/ 지표 공식, 소스 매핑, 실제 MCP 클라이언트로 툴 호출까지 검증공식
FIP = (13·HR + 3·(BB+HBP) − 2·K) / IP + cFIP, cFIP = 리그ERA − (13·lgHR + 3·(lgBB+lgHBP) − 2·lgK) / lgIP
BABIP = (H − HR) / (AB − K − HR + SF). KBO CSV에 피타수가 없으면 상대타자 기반 근사치로 계산하고 결과에 표시
LOB% = (H + BB + HBP − R) / (H + BB + HBP − 1.4·HR)
피타고리안 기대 승률 = RS^x / (RS^x + RA^x), 기본 x = 1.83
운 체크 기준(ERA-FIP ±0.75, BABIP ±.030, LOB% ±5%p)은 "어디를 더 볼지" 알려주는 신호일 뿐이다. 40이닝 미만이면 소표본 경고가 붙는다.
한계와 다음 단계
Statcast(xERA, 배럴, 하드히트), WAR, 파크팩터, wOBA는 없다. wOBA는 리그·시즌별 가중치가 필요해서 근사치로 넣지 않았다.
다음에 붙이기 좋은 것: Baseball Savant CSV 로더(운 체크에 xERA 추가), 시즌 비교 툴, 경기 로그, KBO 연도별 추이
MLB Stats API 데이터는 개인적·비상업적 용도로만 쓸 것
라이선스
MIT. 단, MLB Stats API로 가져온 데이터 자체는 MLB 저작권 고지를 따른다.
Available Tools
6 toolsbaseball_leaderboardSeason leaderboardBRead-onlyIdempotent
Rank players by any computed metric, including ones the source does not publish (FIP, K-BB%, LOB%, ISO...).
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Only players whose team contains this text. | |
| group | No | 'hitting' or 'pitching'. | hitting |
| limit | No | Rows to return. | |
| format | No | 'markdown' (default) or 'json'. | markdown |
| league | No | Which league's data to use. | MLB |
| min_ip | No | Extra minimum IP filter (pitching). | |
| min_pa | No | Extra minimum PA filter (hitting). | |
| season | No | Season year. Default: current MLB season / latest KBO file. | |
| sort_by | Yes | Metric to rank by. Hitting: ops, obp, slg, avg, iso, babip, bb_pct, k_pct, bb_k, hr, hr_pct, sb, pa. Pitching: fip, era, era_minus_fip, whip, k_pct, bb_pct, k_minus_bb_pct, k9, bb9, hr9, babip, lob_pct, ip, so. | |
| ascending | No | Override sort direction. Default: best first (low ERA/FIP/WHIP, high OPS...). | |
| qualified | No | Only rate-qualified players (3.1 PA / 1.0 IP per team game). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, so the safety profile is covered. The description does add one genuinely useful behavioral fact: it computes metrics the source does not publish (FIP, K-BB%, LOB%, ISO), implying derived/calculated output rather than raw retrieval. It says nothing about caching, data freshness, or league-specific caveats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. The differentiating capability (computed metrics) is placed prominently rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, the description does not need to explain return values or defaults. It adequately frames the tool's core behavior, though it omits that league/season/qualification scope is configurable, which the schema silently handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters including sort_by enums, defaults, and qualification rules. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rank), resource (players), and mechanism (any computed metric, including derived stats the source doesn't publish). This clearly separates it from siblings like baseball_player_stats or mlb_standings, though it never names an alternative to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no mention of alternatives such as baseball_player_stats for a single player. Usage is only inferable from the verb 'Rank'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
baseball_pitcher_luck_checkPitcher luck check (ERA vs FIP, BABIP, LOB%)ARead-onlyIdempotent
Is a pitcher's ERA lucky or unlucky? Compares ERA to FIP, then BABIP and LOB% to the league.
Returns the gaps, plain-language signals, an overall verdict, and caveats (sample size, contact quality, defense). Signals are leads to investigate, not conclusions.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional team filter. | |
| format | No | 'markdown' (default) or 'json'. | markdown |
| league | No | Which league's data to use. | MLB |
| player | Yes | MLB: English name or id. KBO: Korean name as in the CSV. | |
| season | No | Season year. Default: current MLB season / latest KBO file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe, read-only, idempotent profile, so the description is free to add value elsewhere: it discloses the output shape (gaps, plain-language signals, verdict, caveats) and the caveat categories (sample size, contact quality, defense). The 'leads not conclusions' framing usefully sets expectations about interpretation. It stops short of noting data-freshness or coverage limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded opening question, one sentence on method, one on returns, one on caveats — every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full schema, complete parameter coverage, and an output schema, the description is nearly complete; it even summarizes return values despite the output schema existing. Only minor gaps remain (no explicit alternative-tool routing), keeping it just below the top.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with player/team/league/season/format all documented in the schema itself, so the schema already carries parameter meaning. The description adds no format or naming syntax beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It states a specific analytical verb and resource ('Is a pitcher's ERA lucky or unlucky? Compares ERA to FIP, then BABIP and LOB%') and clearly sets itself apart from generic siblings like baseball_player_stats by being a verdict/interpretation tool rather than a raw-stat lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intent ('is ERA lucky or unlucky') implies when to reach for it, and the closing line 'Signals are leads to investigate, not conclusions' frames how to treat output. However, it never states when to prefer this over baseball_player_stats or an explicit exclusion, relying on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
baseball_player_statsPlayer season statsARead-onlyIdempotent
Get one player's regular-season line plus computed sabermetric rates.
Hitting returns AVG/OBP/SLG/OPS, ISO, BABIP, BB%, K%, BB/K. Pitching returns ERA, FIP, ERA-FIP, WHIP, K%, BB%, K-BB%, BABIP, LOB%, HR/9 (FIP uses a league constant computed from that season's league totals). Use baseball_pitcher_luck_check for an ERA-vs-FIP read.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional team filter to disambiguate same-name players. | |
| group | No | 'hitting' or 'pitching'. | hitting |
| format | No | 'markdown' (default) or 'json'. | markdown |
| league | No | Which league's data to use. | MLB |
| player | Yes | MLB: English name or numeric MLB id. KBO: Korean name as in the CSV. | |
| season | No | Season year. Default: current MLB season / latest KBO file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower, and the description adds real context: it details the computed metrics per group and discloses that FIP relies on a league constant derived from that season's league totals. It stops short of noting edge cases such as ambiguous or missing players.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in one sentence, then lists the returned metrics per group. The metric enumeration is dense but serves the caller; it could be trimmed slightly since an output schema exists, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter lookup tool with full schema coverage, annotations, and an output schema, the description covers purpose, routing, and result shape completely. An agent has everything needed to call it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is a 3, but the description adds meaning by tying the 'group' parameter to two distinct output shapes (hitting vs pitching metrics) and by explaining the derivation of FIP. That is genuine value beyond the enum labels in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get one player's regular-season line plus computed sabermetric rates') and enumerates the exact metrics returned for each group, so an agent knows precisely what the tool produces. It also distinguishes itself from a named sibling (baseball_pitcher_luck_check), so it is not confused with the other baseball tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes one case to an alternative: 'Use baseball_pitcher_luck_check for an ERA-vs-FIP read.' That is clear context for a specific scenario, but there is no broader when-to-use statement versus siblings like baseball_leaderboard or mlb_search_players, and no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kbo_data_statusKBO data files statusARead-onlyIdempotent
Show which KBO CSV files are loaded, their row counts, any column problems, and the expected file names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered structurally. The description adds the substance of what is surfaced (row counts, column problems, expected names), but an output schema already exists to carry return details, so the marginal behavioral value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence that front-loads the action and enumerates the reported facets without filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic whose return shape is defined by an output schema, the description covers what the agent needs to know. Only the trigger conditions for calling it are absent, a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The 100% schema coverage and empty properties object leave no semantic gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (show) and a precisely scoped resource (KBO CSV file load status), enumerating the facets reported: loaded files, row counts, column problems, expected names. This is clearly distinguishable from the sibling tools, which deal with player stats, leaderboards, and standings, not data-file diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a diagnostic use case but never states when to reach for this tool versus alternatives or what condition triggers it (e.g., before running a stats query to verify data is present). Usage is inferable from the content but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_search_playersSearch MLB playersARead-onlyIdempotent
Find MLB player ids by name. Use the id with the other tools when a name is ambiguous.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Full or partial English name, e.g. 'Kim', 'Ohtani'. | |
| limit | No | Max results. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (read-only, idempotent, non-destructive, open-world). The description adds useful behavioral context beyond that: it explains that the tool returns ids and that those ids are meant to be passed to other tools, plus it flags ambiguity handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste. The core action is front-loaded, and the workflow cue is placed second without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description does not need to explain return values. It sufficiently covers what the tool does and how its output integrates with sibling tools, leaving no essential gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the name and limit parameters are fully documented in the schema. The description adds no additional parameter semantics beyond what the schema already provides, which is the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: find MLB player ids by name. This implicitly distinguishes it from sibling stats/standings tools by emphasizing that the output is an id, but it does not explicitly name an alternative or contrast scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear workflow guidance: use the returned id with other tools when a name is ambiguous. This implies the tool should be used as a resolver before other baseball tools, though it does not state when not to use it or name a specific alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mlb_standingsMLB standings with Pythagorean recordARead-onlyIdempotent
Regular-season standings by division, with run differential, Pythagorean expected wins, and luck (actual wins minus expected).
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'markdown' (default) or 'json'. | markdown |
| season | No | Season year. Default: current season. | |
| exponent | No | Pythagorean exponent (1.83 is the common choice; 2.0 is Bill James' original). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description adds useful content context (what metrics are computed) but says nothing about data freshness, season availability, or any rate/API constraints, so it adds only modest value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource and its key outputs, with zero filler. Nothing redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema fully documents all three parameters. The description covers scope and computed metrics; only minor omissions (e.g., whether standings are live or cached) keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'format', 'season' and 'exponent' fully documented including defaults and ranges, so the baseline of 3 applies. The description alludes to Pythagorean expected wins but adds no new syntax or usage meaning for the exponent parameter beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Regular-season standings by division') and enumerates the derived metrics returned (run differential, Pythagorean expected wins, luck), so the agent knows exactly what it gets. It does not explicitly differentiate itself from siblings like baseball_leaderboard, which could partially overlap, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for division standings, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g., vs baseball_leaderboard). Minimum viable guidance, no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
baseball_leaderboard - First observed
baseball_pitcher_luck_check - First observed
baseball_player_stats - First observed
kbo_data_status - First observed
mlb_search_players - First observed
mlb_standings
TDQS
Scored across 6 tools
Each tool targets a distinct action (data status, player lookup, ranking, luck diagnosis, id search, standings), and cross-references between stats and luck-check help steer selection. However the mixed KBO/MLB scope is not obvious from names, so an agent may be unsure which league a generic tool like baseball_player_stats or baseball_leaderboard applies to.
Three prefix families (kbo_, baseball_, mlb_) coexist and the noun/verb structures vary: kbo_data_status and mlb_standings are noun-only while mlb_search_players is verb_noun. The prefixes plausibly encode data source, keeping it readable, but the pattern is not uniform.
Six tools is a tight, well-scoped set for a baseball stats server, with each tool covering a distinct facet (status, player, leaderboard, luck, search, standings). No tool feels redundant or out of place.
The surface covers data readiness, player stats, ranking, pitcher luck, id lookup, and standings, forming a coherent lookup-and-diagnose workflow. Minor gaps remain (e.g. no KBO-specific player search parallel to mlb_search_players, no team-level stats beyond standings), but agents can work around these.
Maintenance
Related MCP Connectors
Provides easy access to MLB, Baseball Savant, Statcast, and Fangraphs baseball data. Query detaile…
MLB Stats API MCP — official MLB statistics (keyless).
Live sports stats and pre-computed analysis for AI assistants across NBA, MLB, NFL, and NHL.
Free fantasy sports AI: ESPN, Sleeper and Fantrax league data for Claude and ChatGPT. Read-only.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceProvides access to comprehensive MLB baseball statistics through the MLB Stats API, pybaseball library, Statcast data, FanGraphs, and Baseball Reference, including support for generating matplotlib visualizations.33-
- AlicenseAqualityDmaintenanceConnects Claude to the SportRadar MLB API to access real-time baseball data including game schedules, live scores, player statistics, team standings, injury reports, and play-by-play information through natural language queries.191MIT
- AlicenseAqualityDmaintenanceEnables users to query MLB Statcast, FanGraphs, and Baseball Reference data using natural language through an AI assistant. It provides comprehensive tools for analyzing player performance, pitch-level data, season leaderboards, and team standings.2436MIT
- FlicenseNot gradedqualityDmaintenanceCollects baseball league data from gameone.kr and enables Claude Desktop to perform team analysis, lineup recommendations, and opponent strategy through natural language.-