mcpField
M
mlb-league-state-reader

mlb-league-state-reader

github.com/lyndonkl数据与数据库18741 次安装10 周前更新
代码仓库

关于 mlb-league-state-reader

用于读取 Yahoo Fantasy MLB 联盟状态的技能,供后续分析 Agent 获取阵容、排名、对阵、FAAB 和自由球员信息。它更新当前球队档案并生成带来源和置信度的信号文件。

主要功能

  1. 01读取阵容、排名和当前对阵
  2. 02从交易记录计算剩余 FAAB
  3. 03采集自由球员名单
  4. 04更新球队状态档案
  5. 05生成含来源与置信度的信号

适用场景

  1. 01为每日阵容分析准备最新联盟数据
  2. 02向弃标分析提供 FAAB 和自由球员信息
  3. 03让下游 Agent 读取统一状态,避免重复抓取

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lyndonkl/claude --skill mlb-league-state-reader

安装后在 Claude Code 中输入/mlb-league-state-reader确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

resources/
methodology.md
template.md
resources/evaluators/
rubric_mlb_league_state_reader.json

详细介绍

MLB League State Reader

目录

示例

场景:2026-04-17 运行晨间简报。教练在启动 lineup-optimizer 前,需要当前阵容、对阵、FAAB 和排名。

首先读取的输入:

  • yahoo-mlb/context/league-config.md(联盟 ID 23756、球队 5、12 支球队、5x5 类别)
  • yahoo-mlb/context/team-profile.md(此前已知的阵容框架)

Chrome 导航顺序(已通过身份验证):

  1. https://baseball.fantasysports.yahoo.com/b1/23756/5 — 阵容及每位球员今日的对手
  2. https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand — 排名和各类别排名
  3. https://baseball.fantasysports.yahoo.com/b1/23756/matchup — 本周对阵 Los Doyers 的正面对决
  4. https://baseball.fantasysports.yahoo.com/b1/23756/transactions — 截至目前已花费的 FAAB → 剩余金额
  5. https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A — 顶尖自由球员(第 1 页)

提取的信息包:

字段值
战绩8-6-1
排名12 支球队中第 5
已花费 FAAB$14
剩余 FAAB$86
本周对手Los Doyers
实时对阵比分4-3-3(我们在 R、HR、K 领先;在 OBP、ERA、WHIP 落后)
已返回阵容26 个名额全部填满
排名前 20 的自由球员已为 waiver-analyst 收集

写入的输出:

  • context/team-profile.md — 就地更新阵容快照(位置、球员、MLB 球队、今日对手、状态)
  • signals/2026-04-17-league-state.md — 包含 YAML frontmatter、source_urls 和置信度的信号文件

此后,每个下游 Agent(lineup-optimizer、waiver-analyst、category-strategist)都会读取此信号文件和 team-profile.md,而不是重新抓取 Yahoo。

工作流

复制此清单并跟踪进度:

League State Reader Progress:
- [ ] Step 1: Read context files (league-config.md + team-profile.md)
- [ ] Step 2: Pull Yahoo pages via Claude-in-Chrome (5 URLs)
- [ ] Step 3: Parse roster, standings, matchup, FAAB, free agents
- [ ] Step 4: Update team-profile.md in place
- [ ] Step 5: Emit signal file with frontmatter + source_urls

步骤 1:读取上下文文件

在访问 Yahoo 之前,先加载权威配置和最近一次已知状态。这既能核实联赛 ID/URL,也能提供用于对比的基础数据。

  • 读取 yahoo-mlb/context/league-config.md — 确认联赛 ID 为 23756、球队为 5、阵容结构为 C/1B/2B/3B/SS/3OF/2UTIL/3SP/2RP/5P/3BN/3IL = 26,FAAB 预算为 $100
  • 读取 yahoo-mlb/context/team-profile.md — 记录上次剩余的 FAAB,以及用于对比的上次阵容
  • 读取 yahoo-mlb/context/frameworks/signal-framework.md — 确认信号文件格式
  • 读取 yahoo-mlb/context/frameworks/data-sources.md — 确认 5 个 Yahoo URL

步骤 2:通过 Claude-in-Chrome 获取 Yahoo 页面

用户已在浏览器中完成身份验证。按顺序导航并解析页面文本;如果任何步骤失败,仅针对该 URL 跳转到降级模式(不要中止整个流程)。具体的工具调用顺序和页面解析模式,请参阅 resources/methodology.md。

  • 球队页面:https://baseball.fantasysports.yahoo.com/b1/23756/5
  • 排名:https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand
  • 对阵:https://baseball.fantasysports.yahoo.com/b1/23756/matchup
  • 交易(用于 FAAB):https://baseball.fantasysports.yahoo.com/b1/23756/transactions
  • 自由球员:https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A

步骤 3:解析并规范化

从每个页面提取结构化数据。逐行解析逻辑请参阅 resources/methodology.md;关于如何根据交易日志还原剩余 FAAB,请参阅 resources/methodology.md。

  • 阵容:为 26 个位置中的每个位置记录 {slot, player, mlb_team, opp_today, status: active|IL|DTD|NA|BN}
  • 排名:胜-负-平战绩、排名、各类别排名(10 个类别)
  • 对阵:对手名称、各类别的实时比分(本周截至目前 10 个类别的胜-负-平)
  • FAAB:汇总本赛季交易记录中所有 -$N 条目;剩余金额 = $100 - 已花费总额
  • 自由球员:记录按 rostered% 排序的前 25 名,供 waiver-analyst 开始排名

步骤 4:就地更新 team-profile.md

确切的输出格式请参阅 resources/template.md。覆盖现有文件(不要追加);此文件应始终反映“截至最近一次运行”的状态。

  • 标题:## As of YYYY-MM-DD
  • 状态表:战绩、排名、剩余 FAAB、当前对手、已使用的球员签入次数、已使用的 IL 位置
  • 阵容快照:完整的 26 个位置 YAML 代码块
  • 未决问题:除非某个页面加载失败,否则留空

步骤 5:生成信号文件

按照信号框架的要求,写入 yahoo-mlb/signals/YYYY-MM-DD-league-state.md,并包含 YAML frontmatter。所有已导航的 URL 都必须出现在 source_urls 中。降级获取时将 confidence 降至 0.5;完全失败的字段降至 0.3 并标记出来。请参阅 resources/template.md。

  • Frontmatter:type: league-state、date、emitted_by: mlb-league-state-reader、confidence、source_urls[]
  • 正文:阵容表、排名表、对阵表、FAAB 账目、排名前 25 的自由球员
  • 写入前通过 mlb-signal-emitter 验证(如果本次运行中有此技能);否则直接写入

降级模式

Chrome 可能因多种原因而失败:标签页未打开、会话过期、Yahoo 限流、500 错误、DOM 无法读取。**绝不要中止整个运行。**按 URL 优雅地处理失败。

逐 URL 回退决策树:

失败回退方案
导航错误/超时重试一次。如果仍然失败,询问用户:“请粘贴 {URL} 的内容,我会从中解析。”
会话过期(返回登录页面)询问用户:“请在 Chrome 标签页中登录 Yahoo,然后回复‘重试’。”不要尝试重新进行身份验证。
页面已加载但解析失败(布局未知)将 get_page_text 的前约 4000 个字符写入信号文件的 raw_capture: 下,并将该字段的置信度降至 0.4。
自由球员页面受限/为空标记为 free_agents: [],并在信号中注明。waiver-analyst 仍可根据阵容 + 排名运行。
交易页面受限询问用户:“你现在还剩多少 FAAB?交易页面顶部可以看到。”接受用户提供的数值;标记 faab_confidence: 0.6。

用户粘贴模板(适用于任何 Yahoo 页面):

“我无法访问 {URL}。请复制该页面上可见的表格(全选后粘贴到聊天中),我会从你粘贴的内容中提取所需字段。”

使用与实时页面相同的正则表达式/行模式解析粘贴的文本。请参阅 resources/methodology.md。

防护规则

  1. **绝不要假定阵容还是昨天的样子。**弃用名单每天清空,交易随时可能生效。每次运行开始时都要重新读取 Yahoo 球队页面,即使 team-profile.md 看起来是最新的也不例外。

  2. **剩余 FAAB 是计算得出的,不是直接显示的。**Yahoo 的界面有时会显示“FAAB Balance”,有时不会。权威计算方式是:$100 减去本赛季交易页面上所有中标金额的总和。不要相信单个可见数值胜过交易记录。

  3. **引用每个 URL。**信号文件的 source_urls: 列表必须包含实际访问过的每个 Yahoo 页面。如果某个页面因降级而被跳过,请在信号正文中注明,不要默默略过。

  4. **不要在下游重复抓取。**此技能发出今天的联赛状态信号后,lineup-optimizer / waiver-analyst / category-strategist 必须读取该信号,而不是重新访问 Yahoo。重复抓取会浪费 token,还可能导致数据不一致。

  5. **覆盖 team-profile.md;不要追加内容。**该文件记录的是“当前状态”。保留昨天的阵容会污染它。只追加的日志位于 tracker/decisions-log.md,不在此处。

  6. **状态值使用规范化枚举。**将 Yahoo 的标签(P、DTD、IL-10、IL-60、NA、SUSP)映射到规范化枚举:active | BN | IL | DTD | NA | SUSP。下游 Agent 根据枚举分支处理,而不是依据 Yahoo 的字符串。

  7. **今天的对手可能为空。**休赛日、比赛延期和双重赛都会产生异常的 opp_today 值。准确记录 Yahoo 显示的内容(@TEX、TEX、Off、PPD、DH1/DH2)——不要规范化掉下游 lineup-optimizer 需要的信息。

  8. **不要发出 source_urls 为空的信号。**如果所有页面都失败,请写入正文为空、confidence: 0.0 的信号,并向教练醒目提示:“无法访问 Yahoo——任何下游 Agent 运行前都需要粘贴内容或重试。”

快速参考

五个 Yahoo URL(来自 context/frameworks/data-sources.md):

Team:         https://baseball.fantasysports.yahoo.com/b1/23756/5
Standings:    https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand
Matchup:      https://baseball.fantasysports.yahoo.com/b1/23756/matchup
Transactions: https://baseball.fantasysports.yahoo.com/b1/23756/transactions
Free agents:  https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A

Chrome 工具顺序(先通过 ToolSearch 加载,然后调用):

1. mcp__claude-in-chrome__tabs_context_mcp    (confirm active tab, auth state)
2. mcp__claude-in-chrome__navigate            (go to URL)
3. mcp__claude-in-chrome__get_page_text       (extract DOM text)
4. mcp__claude-in-chrome__read_page           (structured read if text fails)

阵容位置顺序(用于 team-profile YAML;与 league-config.md 一致):

C, 1B, 2B, 3B, SS, OF, OF, OF, UTIL, UTIL, SP, SP, SP, RP, RP, P, P, P, P, P, BN, BN, BN, IL, IL, IL

状态枚举映射:

Yahoo标准化后
(空白) / Pactive
BNBN
DTDDTD
IL-10 / IL-60 / ILIL
NANA
SUSPSUSP

Signal 前置元数据(必需字段):

---
type: league-state
date: 2026-04-17
emitted_by: mlb-league-state-reader
variant_synthesis: false
confidence: 0.9
source_urls:
  - https://baseball.fantasysports.yahoo.com/b1/23756/5
  - https://baseball.fantasysports.yahoo.com/b1/23756?lhst=stand
  - https://baseball.fantasysports.yahoo.com/b1/23756/matchup
  - https://baseball.fantasysports.yahoo.com/b1/23756/transactions
  - https://baseball.fantasysports.yahoo.com/b1/23756/players?status=A
---

关键资源:

所需输入:

  • Chrome 中已通过身份验证的 Yahoo Fantasy 会话(由用户负责)
  • context/league-config.md(联盟 ID、球队 ID、阵容结构)
  • context/team-profile.md(先前状态,可能是占位文件)

生成的输出:

  • 更新后的 context/team-profile.md(覆盖;反映今天的状态)
  • signals/YYYY-MM-DD-league-state.md(包含前置元数据 + source_urls)
  • 如果任何页面加载失败,则向用户提供降级模式提示词

评论

支持 Markdown